Leo*_*袁力皓 5 ajax firefox jquery
请看下面的代码,您认为首先打印哪个日志?
在Chrome和IE中,"同步ajax调用:成功"首先显示,
但是在FF(在FF 3.6和FF 17.0中测试),"异步ajax调用:成功"首先显示,
这意味着虽然我们制作了第二个作为同步调用,但是当它的onreadystatechange被触发时,异步(第一个)ajax调用的处理程序比同步(第二个)ajax调用执行得更好,是否有意义?
这不是一个火狐虫吗?
// first ajax call, Note: this is asynchronous.
$.ajax({
url: "/rest/someUrl",
async : true,
dataType : "json",
contentType: "application/json",
success : function(data) {
console.log("async ajax call: success");
},
error : function(data) {
}
})
// second ajax call, Note: this is synchronous.
$.ajax({
url: "/rest/someUrl",
async : false,
dataType : "json",
contentType: "application/json",
success : function(data) {
console.log("sync ajax call: success");
},
error : function(data) {
}
})
Run Code Online (Sandbox Code Playgroud)
要实现"正确"的东西,必须有一些规范.
在规范中,我没有发现任何引用,只要同步请求没有完成,所有脚本都应该停止执行(请注意,当sync-XHR启动时,async-XHR已经在运行).
但我发现了这个:
每个XMLHttpRequest对象都有自己的任务源.即,XMLHttpRequest任务源.
- 两个请求都代表一个任务来源 -
当用户代理要对任务进行排队时,它必须将给定任务添加到相关事件循环的任务队列之一.[...]来自不同任务源的任务可以放在不同的任务队列中.
- 两个任务可以添加到同一个任务队列中,但不能 -
只要存在,事件循环必须连续执行以下步骤:
1.在事件循环的任务队列之一上运行最旧的任务,如果有的话,[...].用户代理可以选择任何任务队列.
- 他现在选择了他在同步请求中放置的任务队列
当我没有误解这一点,并且我的逻辑没有错时,这可能会继续:
Firefox将两个XHR放在同一个队列中,IE和chrome将它们放在不同的任务队列中.
所有浏览器现在都运行任务队列,放置同步XHR.
两种实现似乎都是正确的.
归档时间: |
|
查看次数: |
1346 次 |
最近记录: |