微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jQuery:为什么$.ajax()不等待请求完成之前返回?

我花了3个小时调试一些代码,发现它是由我造成的,假设下面的代码的执行顺序是线性的:
$.ajax( {ajax options} );
console.log('I was assuming this would execute once the ajax request was complete');

这不是我第一次引起我的问​​题,而只是想知道这个行为的原因是什么?

是不是所有的ajax请求不能阻止可能与ajax请求无关的其他脚本执行?

解决方法

大多数其他答案都在回答如何处理这个问题.我想简要地看一下,为什么异步在这种情况下是好的.

事实上,大多数浏览器中的JavaScript是异步的.举个例子,这段代码

document.getElementById('foo').onclick = function() {
    alert('foo clicked');
};
document.getElementById('bar').onclick = function() {
    alert('bar clicked');
};

哪个会先运行?您不知道,因为浏览器模型固有的异步(或事实上大多数事件驱动的代码).当事件发生时运行代码.您设置文档,然后等待事件发生,您的代码可以按各种不同的顺序执行,具体取决于事件先发生. Javascript代码需要在页面的整个生命周期中执行,而不仅仅是在第一次创建时.

所以在一般的JavaScript编程(或至少,JavaScript编程超出最简单的层次)通常将是异步的.此外,HTTP请求也是异步的,这是很有意义的.

首先,当你暗示你的问题,使代码同步将阻止执行.也就是说,您可能不想让动画等待两秒钟才能开始,因为您正在向两个进一步的HTTP请求发送一个HTTP请求.服务器响应时间可能是(a)不规则和(b)缓慢,因此,您的应用程序的设计不依赖于服务器响应的速度是没有意义的.

第二,更重要的是,您的用户不会停止使用该页面,因为您的脚本正在进行AJAX调用.您的用户不在乎您的用户可能会关心您的正常的滚动行为不起作用,因为您的脚本目前被绑定在一个不相关的AJAX请求中.为了配合整个浏览器Javascript编程的异步性质,绝大多数HTTP调用应该是非阻塞的,异步的.

原文地址:https://www.jb51.cc/jquery/180082.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐