我寫了一個JavaScript函數,它使用XmlHttpRequest異步調用Web服務。我被要求在頁面呈現之前讓這個功能完成它的工作。是否有可能中止同步XmlHttpRequest?
我想我可以使AJAX請求同步,但我不想讓這個頁面掛起時間過長 - 如果沒有收到響應,我想在1秒之後中止請求。
是否有可能中止同步XmlHttpRequest?
我寫了一個JavaScript函數,它使用XmlHttpRequest異步調用Web服務。我被要求在頁面呈現之前讓這個功能完成它的工作。是否有可能中止同步XmlHttpRequest?
我想我可以使AJAX請求同步,但我不想讓這個頁面掛起時間過長 - 如果沒有收到響應,我想在1秒之後中止請求。
是否有可能中止同步XmlHttpRequest?
您不能:
http://www.hunlock.com/blogs/Snippets:_Synchronous_AJAX賽斯: 「同步AJAX(真SJAX - 同步JavaScript和XML)是模式,這意味着,直到結果已經從服務器獲取的JavaScript將停止處理程序當請求正在處理時,瀏覽器被有效地凍結,瀏覽器將該呼叫視爲警告框或提示框,只是它不等待來自用戶的輸入,而是通過遠程服務器的輸入「
一旦瀏覽器運行同步請求,它將等待,直到它會得到響應。
首先,同步AJAX調用是邪惡的,因爲它們阻塞了整個JavaScript瀏覽器引擎(您知道)。
只是簡單地進行異步調用,並且如果到達後的時間比一秒鐘後不夠就丟棄結果?如果你真的想等你仍然可以使用setTimeout()
結果(jQuery的爲了方便,不要求):
var result;
var xhr = $.ajax('/url', function(response) {
result = response;
});
setTimeout(function() {
if(result) {
//AJAX call done within a second, proceed with rendering
} else {
//One second passed, no result yet, discard it and move on
xhr.abort();
}
}, 1000);
通過這種方法,你不會阻止瀏覽器,同時還不必等待AJAX呼叫。
「同步AJAX調用是邪惡的」 - 取決於,因爲有時需要阻止整個JavaScript瀏覽器引擎:) –
XMLHttpRequest
支持abort
方法,你可以在這裏得到更多的細節吧:http://www.w3.org/TR/XMLHttpRequest/#the-abort-method
但你需要檢查多少browserы支持。例如,在Windows Internet Explorer 7及更高版本中引入了abort
。
在調用send()
方法XMLHttpRequest
對象之前或之後,您可以設置一個延遲n秒的定時器,它將中斷正在進行的異步操作。
它可能在IE.Use超時屬性。下面
代碼爲我工作
xmlhttp.open("method","url",false);
xmlhttp.timeout="time in ms";
xmlhttp.ontimeout=function(){};
xmlhttp.send();
問題聽起來是「我可以設置同步XMLHttpRequest的客戶端腳本超時」? –