浅谈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 相关文章推荐
用javascript实现无刷新更新数据的详细步骤 asp
Dec 26 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
Sep 26 Javascript
JavaScript中的操作符==与===介绍
Dec 31 Javascript
jquery表单验证插件formValidator使用方法
Apr 01 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
Mar 02 Javascript
vue实现在表格里,取每行的id的方法
Mar 09 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
May 17 Javascript
使用gulp构建前端自动化的方法示例
Dec 25 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
Sep 02 Javascript
微信小程序收藏功能的实现代码
Jun 19 Javascript
Vuex实现购物车小功能
Aug 17 Javascript
javascript canvas实现雨滴效果
Jun 09 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
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
2011/06/16 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
PHP 使用二进制保存用户状态的实例
2018/01/29 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
Python实现PS图像抽象画风效果的方法
2018/01/23 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
Python模块_PyLibTiff读取tif文件的实例
2020/01/13 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
Python 字符串池化的前提
2020/07/03 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
幼师自荐信范文
2013/10/06 职场文书
蓝颜请假条
2014/04/11 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
音乐学专业求职信
2014/07/22 职场文书
中层干部考核评语
2015/01/04 职场文书
2016教师节感恩话语
2015/12/09 职场文书