浅谈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 相关文章推荐
让innerHTML的脚本也可以运行起来
Jul 01 Javascript
Javascript 篱式条件判断
Aug 22 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
Dec 09 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
Jan 17 Javascript
javascript中innerText和innerHTML属性用法实例分析
May 13 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
Jun 06 Javascript
Jquery组件easyUi实现选项卡切换示例
Aug 23 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
Mar 06 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
Jun 08 Javascript
nginx配置React静态页面的方法教程
Nov 03 Javascript
vue使用i18n实现国际化的方法详解
Sep 05 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
Nov 06 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编写发红包程序
2015/07/22 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
jquery+json实现的搜索加分页效果
2010/03/31 Javascript
js下将字符串当函数执行的方法
2011/07/13 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
python模块导入的方法
2019/10/24 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
python中操作文件的模块的方法总结
2021/02/04 Python
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
汉森批发:Hansen Wholesale
2018/05/24 全球购物
工程概预算专业毕业生求职信
2013/10/04 职场文书
优秀班干部事迹材料
2014/01/26 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python