浅谈js的ajax的异步和同步请求的问题


Posted in Javascript onOctober 07, 2016

先来看以下代码:

var flag=true;
var index=0;
$.ajax({
  url: "https://3water.com/",
  success: function(data){
    flag=false;
  }  
});
while(flag){
  index++;
}
alert(index);

请问最后alert的index的结果是多少?

可能有人会说0呗。实际上却没那么简单。大家可以自己试试看。可以看到最终程序进入了一个死循环!怎么会这样呢!

我们在看一段代码:

var flag=true;
$.ajax({
  url: "https://3water.com/",
  success: function(data){
    flag=false;
  }  
});
alert(flag);

大家看最后alert出flag的值是多少呢?没错,是true!为什么呢?明明我们在ajax请求成功了将flag设为false,怎么还是true呢?这实际上是Ajax的异步机制造成的。

这里解释一下,同步和异步。js是单线程的,由于执行ajax请求会消耗一定的时间,甚至出现了网络故障而迟迟得不到返回结果;这时,如果同步执行的话,就必须等到ajax返回结果以后才能执行接下来的代码,如果ajax请求需要1分钟,程序就得等1分钟。如果是异步执行的话,就是告诉ajax代码“老兄,既然你迟迟不返回结果,我先不等你了,我还有一大堆代码要执行,等你执行完了给我说一下”。

Ajax默认是异步请求的,所以就出现了上面我们看到的结果。也就是ajax里面的代码还没有执行完,先执行了下面的代码。

那么如何使Ajax执行同步请求呢?这就需要设置async。

代码如下:

var flag=true;
var index=0;
$.ajax({
  url: "https://3water.com/",
  async:false,
  success: function(data){
    flag=false;
  }  
});
while(flag){
  index++;
}
alert(index);

async默认是true,也就是异步,我们设置为false,即为同步。这时我们再看看结果吧。

以上就是小编为大家带来的浅谈js的ajax的异步和同步请求的问题全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
用于table内容排序
Jul 21 Javascript
jquery ready函数源代码研究
Dec 06 Javascript
JQuery 将元素显示在屏幕的中央的代码
Feb 27 Javascript
JQuery实现防止退格键返回的方法
Feb 12 Javascript
javascript原生ajax写法分享
Apr 10 Javascript
分享jQuery封装好的一些常用操作
Jul 28 Javascript
jQuery实现6位数字密码输入框
Dec 29 Javascript
Vue 实现双向绑定的四种方法
Mar 16 Javascript
详解一个小实例理解js原型和继承
Apr 24 Javascript
js图片无缝滚动插件使用详解
May 26 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
Sep 23 Javascript
JavaScript实现单点登录的示例
Sep 23 Javascript
jquery删除table当前行的实例代码
Oct 07 #Javascript
JS控制FileUpload的上传文件类型实例代码
Oct 07 #Javascript
jQuery+正则+文本框只能输入数字的实现方法
Oct 07 #Javascript
JS只能输入正整数的简单实例
Oct 07 #Javascript
js判断价格,必须为数字且不能为负数的实现方法
Oct 07 #Javascript
JS验证 只能输入小数点,数字,负数的实现方法
Oct 07 #Javascript
JavaScript SHA512加密算法详细代码
Oct 06 #Javascript
You might like
PHP中路径问题的解决方案
2006/10/09 PHP
php下封装较好的数字分页方法
2010/11/23 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
javascript 定义新对象方法
2010/02/20 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
js之onload事件的一点使用心得
2013/08/14 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
JavaScript中的连续赋值问题实例分析
2019/07/12 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
pygame加载中文名mp3文件出现error
2017/03/31 Python
Python AES加密实例解析
2018/01/18 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
python实现猜单词小游戏
2020/05/22 Python
python组合无重复三位数的实例
2018/11/13 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
详解Django 时间与时区设置问题
2019/07/23 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
TensorFlow获取加载模型中的全部张量名称代码
2020/02/11 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
什么是抽象
2015/12/13 面试题
2015年后备干部工作总结
2015/05/15 职场文书
Redis Lua脚本实现ip限流示例
2022/07/15 Redis
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS