2011-04-18 93 views
1

當通過Ajax將內容加載到div中時出現問題。
我開始打開一個對話框,當我點擊一個按鈕。該對話框加載在一個php文件中。
緊接在對話框的代碼後面,我放置了一些代碼來將某些內容加載到該php文件的div中。我的代碼:內容只會在延遲時顯示

function edit(serverpage, persoonid) 
{ 
    $(".opendg").dialog(
    { 
     open:function() 
     { 
      $(this).load('/location/php/' + serverpage); 
     }, 
     title: 'Change!', 
     autoOpen: true, 
     closeOnEscape: true, 
     height: 335, 
     width: 650, 
     modal: true, 
     resizable: false, 
     close: function(){}, 
     buttons: 
      { 
       "Change": function() 
       { 
        sendedit(serverpage, persoonid); 
        return; 
       }, 
       "Cancel": function() 
       { 
        $(this).dialog("close"); 
       } 
      } 
    }); 
    xmlhttp = ajaxFunction(); 
    if (xmlhttp) 
    { 
     var url = "/location/php/" + serverpage; 
     var pagelength = serverpage.length; 
     var value = serverpage.substr(0,pagelength - 4); 
     var params = "edit=" + value + "&id=" + persoonid; 
     xmlhttp.open("POST", url, true); 
     xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     xmlhttp.setRequestHeader("Content-length", params.length); 
     xmlhttp.setRequestHeader("Connection", "close"); 
     xmlhttp.onreadystatechange = function() 
     { 
      if(xmlhttp.readyState == 4 && xmlhttp.status == 200) 
      { 
       if(xmlhttp.responseText != '') 
       { 
       value = value + 'form'; 
       alert('test'); 
       document.getElementById(value).innerHTML=xmlhttp.responseText; 
       } 
      } 
     } 
     xmlhttp.send(params); 
    } 
} 

正如您所看到的,我在發送responseText到div之前發出了警報。
我這樣做是因爲沒有警報,我得到一個空的表單!
第一次打開對話框我什麼都看不到。重新打開後,我看到我想要的內容的短暫閃光,但以毫秒爲單位消失。

生成內容的代碼:

<?php 
    if($_POST['edit'] == 'editpersoneel') 
    { 
     //Query run here to get the results 
     echo '<form> 
      <table> 
       <tr> 
        <td class="first"> 
         Location: 
        </td> 
        <td> 
         <input type="text" value="'.$result['location'].'" /> 
        </td> 
        <td class="first"> 
         phonenumber 
        </td> 
        <td> 
         <input type="text" value= "'.$result[phonenumber'].'" /> 
        </td> 
       </tr> 
      </table> 
     </form>'; 
    } 
    ?> 
<div id="editpersoneelform"></div> 

我試着用$(文件)。就緒的語句從jQuery的解決這一點,但在任何順序沒有工作。
我認爲問題是div在發送內容時未知(以某種方式)Ajax,但我確實得到了結果。

所以我的問題是:
- 爲什麼我的代碼工作時,我把一個警報呢? (我只需要在這裏打開一次對話框)
- 爲什麼我的內容在1毫秒內被加載和卸載?爲什麼我不得不打開對話框兩次?

UPDATE
當我把警報發送的responseText我不得不打開對話框前兩次我能看到alertbox後。

UPDATE 2
調用事件中的代碼:

<div class="jbutton"> 
    <a onclick="edit(\'editpersoneel.php\',\''.$b['id'].'\')">Adjust</a> 
</div> 

此按鈕被置於一個jquery-UI-手風琴內。

+0

如果您使用的是jQuery,請使用'$。ajax' – 2011-04-18 11:19:34

+0

@experimentX:我不能因爲它是一個學校項目:),我需要使用Ajax這種方式(jQuery以外)...但謝謝你的提示! – Mixxiphoid 2011-04-18 11:22:11

+0

請同時發佈您的html代碼(如果有的話)和事件發生.. – 2011-04-18 11:33:22

回答

1

我完全不明白爲什麼Ajax和從serverpage價值解析這麼複雜的電話,但也許你已經在更多的地方不止一個編輯功能一個JS代碼...但是到了一點:

它看起來像你沒有你的<div id="editpersoneelform"></div>在AJAX被稱爲的HTML內部...

讓我們假設你有類似的HTML文件(我推薦使用jQuery至少處理元素,當你需要AJAX以原始方式調用):

<div id="editpersoneelform"></div> 
<div class="jbutton"> 
    <a onclick="edit(\'editpersoneel.php\',\''.$b['id'].'\')">Adjust</a> 
</div> 
<script type="text/javascript"> 
    function edit(serverpage, persoonid) { 
     $(".opendg").dialog({ 
      open:function() { 
       $(this).load('/location/php/' + serverpage); 
      }, 
      title: 'Change!', 
      autoOpen: true, 
      closeOnEscape: true, 
      height: 335, 
      width: 650, 
      modal: true, 
      resizable: false, 
      close: function(){}, 
      buttons: { 
       "Change": function() { 
        sendedit(serverpage, persoonid); 
        return; 
       }, 
       "Cancel": function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 
     xmlhttp = ajaxFunction(); 
     if (xmlhttp) { 
      var url = "/location/php/" + serverpage; 
      var pagelength = serverpage.length; 
      var value = serverpage.substr(0,pagelength - 4); 
      var params = "edit=" + value + "&id=" + persoonid; 
      xmlhttp.open("POST", url, true); 
      xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
      xmlhttp.setRequestHeader("Content-length", params.length); 
      xmlhttp.setRequestHeader("Connection", "close"); 
      xmlhttp.onreadystatechange = function() { 
       if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
        if(xmlhttp.responseText != '') { 
         value = value + 'form'; 
         alert(value); 
         $('div#'+value).html(xmlhttp.responseText); 
        } 
       } 
      } 
      xmlhttp.send(params); 
     } 
    } 
</script> 

,然後你有一個由AJAX叫你的PHP文件:

<?php 
if($_POST['edit'] == 'editpersoneel') { 
    //Query run here to get the results 
    $form = '<form> 
     <table> 
      <tr> 
       <td class="first">Location: </td> 
       <td><input type="text" value="'.$result['location'].'" /></td> 
       <td class="first">phonenumber</td> 
       <td><input type="text" value= "'.$result[phonenumber'].'" /></td> 
      </tr> 
     </table> 
    </form>'; 
    echo $form; 
} 
?> 

如果要加載AJAX響應某個元素,該元素必須是最近從哪裏AJAX調用的代碼。

試試這個,讓我們知道你是否成功。

+0

感謝您的幫助,但我沒有得到它的工作。還是同樣的問題。另外

是在不同的頁面上,然後 第一個div在editpersoneel.php上,第二個(與調用)在personeel.php – Mixxiphoid 2011-04-18 12:55:45

+0

是的,這就是我指出的 -

必須在同一頁上AJAX調用(所以)是... – shadyyx 2011-04-18 13:13:50

+0

我試着把它放在同一頁面上,就像你的代碼所暗示的那樣,但是卻無法讓它工作。我會用你的例子更多地嘗試一些事情,我會讓你知道的。 – Mixxiphoid 2011-04-18 13:18:08