是否有可能中止同步XmlHttpRequest?
我写了一个JavaScript函数,它使用XmlHttpRequest异步调用Web服务。 我被要求在页面呈现之前让这个功能完成它的工作。
我想我可以使AJAX请求同步,但我不想让这个页面挂起太久 - 如果没有收到响应,我想在1秒后中止请求。
是否有可能中止同步XmlHttpRequest?
你不能:
http://www.hunlock.com/blogs/Snippets:_Synchronous_AJAX sais:“同步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调用。
XMLHttpRequest
支持abort
方法,你可以在这里获得更多关于它的细节:http://www.w3.org/TR/XMLHttpRequest/#the-abort-method
但是你需要检查有多少浏览器支持它。 例如,在Windows Internet Explorer 7及更高版本中引入了abort
。
在调用XMLHttpRequest
对象的send()
方法之前或之后,您可以设置一个延迟n秒的计时器,该计时器将中断正在进行的异步操作。
上一篇: Is it possible to abort a synchronous XmlHttpRequest?
下一篇: How do you make a synchronous / blocking XMLHttpRequest with YUI