浅谈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 相关文章推荐
jquery操作checkbox实现全选和取消全选
May 02 Javascript
关于javaScript注册click事件传递参数的不成功问题
Jul 18 Javascript
JavaScript输出当前时间Unix时间戳的方法
Apr 06 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
Aug 08 Javascript
js拼接html字符串的注意事项
Oct 13 Javascript
js html5 css俄罗斯方块游戏再现
Oct 17 Javascript
JS实现重新加载当前页面或者父页面的几种方法
Nov 30 Javascript
简单谈谈关于 npm 5.0 的新坑
Jun 08 Javascript
利用jsonp与代理服务器方案解决跨域问题
Sep 14 Javascript
fetch 使用及如何接收JS传值
Nov 11 Javascript
vue初始化动画加载的实例
Sep 01 Javascript
js实现多张图片每隔一秒切换一张图片
Jul 29 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乱码问题
2012/03/25 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
jquery.validate使用攻略 第一部
2010/07/01 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
javascript实现倒计时效果
2020/02/17 Javascript
python使用心得之获得github代码库列表
2014/06/25 Python
Python中除法使用的注意事项
2014/08/21 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
python中的列表和元组区别分析
2020/12/30 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
幼儿园园长自我鉴定
2013/10/22 职场文书
毕业典礼演讲稿
2014/05/13 职场文书
销售岗位职责范本
2014/06/12 职场文书
小学教师个人总结
2015/02/05 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
Python爬虫基础之爬虫的分类知识总结
2021/05/13 Python
SpringBoot集成Druid连接池连接MySQL8.0.11
2021/07/02 Java/Android