2012-07-15 58 views
4

這是我的代碼:爲什麼500錯誤休息Ajax調用?

http_request = new XMLHttpRequest(); 
if (http_request.overrideMimeType) http_request.overrideMimeType('text/javascript'); 
http_request.onreadystatechange = alertContents; 
http_request.open('POST', base_url, true); 
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
http_request.setRequestHeader("Content-length", parameters.length); 
http_request.setRequestHeader("Connection", "close"); 
http_request.send(parameters); 

在最新的Firefox中運行。

此代碼正常工作完美,但時調用的頁面的JavaScript產生停止網頁上運行的500內部服務器錯誤,並計劃在使用setInterval/setInterval的其他事件無法得到執行。爲什麼會發生?我如何捕捉它?

+0

嘗試定義一個'onerror'回調。捕獲錯誤可能會阻止事件冒出來...... – hvgotcodes 2012-07-15 23:28:21

+0

@hvgotcodes沒有幫助 – Benubird 2012-07-16 16:47:28

回答

0

的問題可能是在您alertContents功能(在你的問題中未示出)。通過.onreadystatechange調用的函數幾乎總是看起來是這樣的:

var callback = function() { 
    if (http_request.readyState==4 && http_request.status==200) { 
    // do stuff 
    } 
} 

如果頁面產生一個500 HTTP代碼然後if語句將失敗,並且代碼的回調,其餘將不會執行。要趕上它添加:

else if(http_request.readyState==4 && http_request.status==500) { 
    console.log('The server\'s on fire!'); 
} 
+0

您需要轉義console.log參數,例如'console.log('服務器'on fire!'); ' – 2013-05-15 07:35:45

+0

所以,那爲什麼會作出安排在使用setInterval不火進一步的事件? – Benubird 2013-05-15 09:20:00

+0

糟糕 - 應該在發佈前測試我的代碼。流氓撇號現已修復。感謝您發現它,Zeb – 2013-05-15 09:50:18