是否可能中止同步XmlHttpRequest ?
Is it possible to abort a synchronous XmlHttpRequest?
我编写了一个JavaScript函数,它使用XmlHttpRequest异步调用web服务。我被要求在页面呈现之前让这个函数完成它的工作。
我认为我可以使AJAX请求同步,但我不希望这使页面挂起太长-我想在1秒后中止请求,如果没有收到响应。
是否有可能中止同步XmlHttpRequest?
你不能:
http://www.hunlock.com/blogs/Snippets _Synchronous_AJAX知道:同步AJAX(实际上是sajax——同步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秒延迟的计时器,该计时器将中断正在进行的异步操作。
这在IE中是可能的。使用timeout属性
下面的代码为我工作
xmlhttp.open("method","url",false);
xmlhttp.timeout="time in ms";
xmlhttp.ontimeout=function(){};
xmlhttp.send();
- 在控制器和数据对象之间同步数据
- 同步调用,直到用户通过angular验证为访问者
- javascript函数同步
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 显示具有服务器端自动时间注销的同步倒计时计时器
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- 音频和动画在javasctipt循环中同步
- 主线程上的同步XMLHttpRequest已弃用
- 主干网.与Safari同步问题
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- 是否同步加载了LINK元素
- 异步获取数据使用JavaScript同步获取数据
- 以同步方式获取Javascript Promise的值
- ajax调用获胜't同步执行
- javascript函数中的异步与同步.(Node.js)
- 如何同步写入process.stdout
- JavaScript 函数同步执行
- HTML5应用程序数据库同步
- Node.js和同步API函数
- strongloop script.js run find in before delete方法:如何同步运行异步方法