是否有可能中止同步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秒的计时器,该计时器将中断正在进行的异步操作。

链接地址: http://www.djcxy.com/p/55335.html

上一篇: Is it possible to abort a synchronous XmlHttpRequest?

下一篇: How do you make a synchronous / blocking XMLHttpRequest with YUI