2010-12-14 65 views
1

返回的readyState 4或狀態200,我有以下通用的Ajax功能:PHP從來沒有在阿賈克斯

//run post request 
function ajaxPost (divid, parameters, file) { 

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } else {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

xmlhttp.onreadystatechange=function() { 
    alert ("ok") 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     alert ("ready"); 
     alert (xmlhttp.responseText); 
    divid.innerHTML=xmlhttp.responseText; 
    } 
    } 

    xmlhttp.open("POST", file,true); 

    //Send the proper header information along with the request 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.setRequestHeader("Content-length", parameters.length); 
xmlhttp.setRequestHeader("Connection", "close"); 



xmlhttp.send(parameters); 
} 

的問題是,由於預期本節不工作:

xmlhttp.onreadystatechange=function() { 
    alert ("ok") 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     alert ("ready"); 
     alert (xmlhttp.responseText); 
    divid.innerHTML=xmlhttp.responseText; 
    } 
    } 

在瀏覽器中我按照我的預期獲取多個「ok」警報,但if語句中的語句永遠不會觸發。我認爲這意味着PHP正在返回狀態更新,但由於某種原因永遠不會返回就緒代碼。這怎麼可能發生 - 我不知道。

有誰能告訴我爲什麼我不會收到現成的代碼?

PHP的本身不是問題:

<?php 

echo "new"; 

?> 

我已經測試功能輸入(DIVID,參數和文件),這些都是確定。 此功能以前在單獨的項目中工作。

+0

所以它只會一直持續到狀態3?檢查'readyState'的不同值... – 2010-12-14 10:19:38

+0

@Felix King剛剛測試過。它達到狀態4,但狀態在發生後立即返回404。 – YsoL8 2010-12-14 10:23:02

+0

還檢查'狀態'。也許你得到了404。編輯:你去了。 – 2010-12-14 10:24:24

回答

0

我會冒險猜測你的服務器沒有返回有效的200響應,因此if語句xmlhttp.readyState == 4 && xmlhttp.status == 200永遠不會等同於真。

嘗試使用Firebug來查看正在提出的請求(如果有)以及回覆的回覆。如果您不使用Firefox,請嘗試使用代理工具,如Charles

除此之外,我強烈建議使用穩定的開源Javascript庫,如jQuery。這是內置的AJAX代碼(其中包括),這是經過嚴格測試。這不僅會節省您的時間,這將消除錯誤的可能性進一步從自己的代碼,例如,

$.get('url.php', function(data) { 
    // 'data' is responseText 
}); 
0

xmlhttp.readyState & & xmlhttp.status取決於所使用的瀏覽器,而不是PHP腳本。最糟糕的情況是,PHP腳本可能不會重新啓動Status 200,如果發生這種情況意味着您的腳本中有錯誤(有時會導致Status 500)或服務器返回錯誤404。 無論如何,請嘗試直接訪問url,或在firebug日誌窗口中查看,這可能更容易進行調試。

1
xmlhttp.open("POST", file,true); 

file is URL right?
嘗試從該URL回顯。

-1

對不起,但問題很簡單。我花了整整一週的時間。

xmlhttpxmlHttp不一樣。

+0

請寫下評論。 – 2012-12-07 13:23:45