我写了一个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的客户端脚本超时”? –