2014-02-12 69 views
1

你好我使用Ajax調用獲取狀態爲0

alert("4"); 
    req.onreadystatechange=function() 
    { 
    alert("5"); 
    if (req.readyState==4 && req.status==200) 
    { 
    xmlDoc=req.responseXML; 
    alert("xml doc received"+xmlDoc); 
    txt=""; 
    x=xmlDoc.getElementsByTagName("FIRSTNAME"); 
    y=xmlDoc.getElementsByTagName("LASTNAME"); 
    alert("Response achieved"+x); 
    } 
    else 
    { 
    alert("Error!!! --> req.readyState "+req.readyState+" Error !!! ---> req.status "+req.status); 
    } 
    } 


req.open("POST",url,true); 
alert("6"); 
req.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
req.send(parameters); 

我得到的req.readyState爲4和req.status爲0 下面的代碼可能是什麼問題

我我在本地的apache服務器上託管一個文件。 請回復。

+0

不是原因,但:當處理ajax(或其他異步)時,*不要*使用'alert'。 'alert'停止JavaScript解釋器,並且可以(取決於您使用的瀏覽器)以奇怪的方式與異步代碼交互。使用您的瀏覽器的調試器,它不僅爲此設計,而且爲您提供*顯着的*更多信息。或者最糟糕的是,使用'console.log'。但是,調試器又是專爲幫助您瞭解代碼的運行方式而設計的,它允許您檢查變量等。 –

+0

[HTML5 Post Request Body]的可能重複(http://stackoverflow.com/questions/21725580/html5 -post請求體) – Quentin

回答

3

通常的原因是您試圖進行跨域呼叫並被Same Origin Policy阻止,該阻止禁止交叉源ajax呼叫。您應該在開發者控制檯或網絡標籤中收到錯誤消息,告訴您該請求已被阻止。

如果您控制有問題的服務器,或者您可以聯繫相關人員,您可以通過Cross-Origin Resource Sharing從您的原始設備訪問。只要他們將您的出處列入白名單,即可與所有現代瀏覽器一起使用,儘管在IE8和IE9中不得不使用微軟的特殊XDomainRequest對象而不是XMLHttpRequest(截止IE10,微軟終於加入了該派對)。

或者,你可能會看到,如果你想與支持JSONP使用的服務器(不JSON混淆),但因爲你的要求是一個POST和JSONP本質上是一種GET操作,他們可能不會。