我在遇到同步AJAX請求時遇到問題。同步AJAX調用並非真正同步
我正在創建一個Web應用程序,其中有許多按順序調用的AJAX請求,應按嚴格順序返回。我決定只是同步地調用它們,而不是將每個後續請求放入最後一個請求的readystatechange事件處理程序中。
但是,在下面的代碼中,在向添加對DOM的響應之前,將調用alert()。
window.addEventListener("load", main, false);
function main (e) {
// Sending synchronous request
var request = new XMLHttpRequest();
request.open("GET", fileName, false);
request.overrideMimeType("text/xml");
request.send(null);
// Receiving response
var response = request.responseXML;
// Changing XML Tree to corresponding XHTML Tree
response = XMLtoXHTML(response);
//Adding response to the body
document.body.appendChild(response);
// Calling alert
alert("Hello World");
}
的響應變得其實成功添加到DOM,但只有點擊警報消息OK了。當我使用Safari的腳本調試功能進行漫遊時,在調用alert()之前,響應確實將添加到DOM 。
有什麼建議嗎?
注意:我遺漏了其他請求。
既然你不使用'onreadystatechange'處理程序,它似乎不太可能在'appendChild'之前調用'alert'。你有沒有同步運行多個AJAX請求的問題,或者這只是一個測試?難道這個元素實際上是被添加的,但是Safari在點擊'alert'後纔會重繪文檔?您是否嘗試過使用Firefox或IE瀏覽器來查看它們是否有不同的功能? – 2012-03-07 20:01:37
良好的通話測試它在不同的平臺上。這似乎是一個只有Safari的問題。我想你是對的異步只是要走的路。 – 2012-03-07 20:08:56
真的,除非您專門試圖阻止用戶在您的請求期間進行交互,或者您正在使用Web工作者,否則應始終運行異步請求。同步請求被阻塞,這意味着在請求完成之前,頁面上沒有其他JS可以運行 - 沒有JS懸停效果,沒有點擊按鈕等 - 只是想如果其中一個請求緩慢或超時...如果你只是想連鎖請求,然而,'onreadystatechange'是要走的路。 – 2012-03-07 20:19:07