浅谈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 相关文章推荐
jQueryUI如何自定义组件实现代码
Nov 14 Javascript
火狐textarea输入法的bug的触发及解决
Jul 24 Javascript
Javascript基础 函数“重载” 详细介绍
Oct 25 Javascript
一个判断抢购时间是否到达的简单的js函数
Jun 23 Javascript
javascript删除数组重复元素的方法汇总
Jun 24 Javascript
学习使用AngularJS文件上传控件
Feb 16 Javascript
基于javascript html5实现多文件上传
Mar 03 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
Jan 10 Javascript
深入理解AngularJS中的ng-bind-html指令
Mar 27 Javascript
Vue 创建组件的两种方法小结(必看)
Feb 23 Javascript
微信jssdk逻辑在vue中的运用详解
Nov 14 Javascript
详解小程序退出页面时清除定时器
Apr 28 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中如何调用用户自定义函数
2013/08/06 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
使用JQuery进行跨域请求
2010/01/25 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
Angular4表单验证代码详解
2017/09/03 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
vue之延时刷新实例
2019/11/14 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
python多进程使用函数封装实例
2020/05/02 Python
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
专业实习自我鉴定
2013/10/29 职场文书
个人自我鉴定写法
2013/11/30 职场文书
日语求职信范文
2013/12/17 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
标准的毕业生自荐信
2014/04/20 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
机关作风建设工作总结
2014/10/23 职场文书
初中中等生评语
2014/12/29 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers