浅谈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的textarea发布框限制文字字数输入(添加中文识别)
Feb 16 Javascript
javascript实现可全选、反选及删除表格的方法
May 15 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
Dec 04 Javascript
javascript的函数劫持浅析
Sep 26 Javascript
Vue开发过程中遇到的疑惑知识点总结
Jan 20 Javascript
简单实现JavaScript弹幕效果
Aug 27 Javascript
Vue2.0 组件传值通讯的示例代码
Aug 01 Javascript
JS获取字符对应的ASCII码实例
Sep 10 Javascript
Vue.js实现可排序的表格组件功能示例
Feb 19 Javascript
移动端手指操控左右滑动的菜单
Sep 08 Javascript
JavaScript实现像雪花一样的Hexaflake分形
Jul 07 Javascript
微信小程序:报错(in promise) MiniProgramError
Oct 30 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中过滤非法字符的具体实现
2013/10/29 PHP
PHP数组游标实现对数组的各种操作详解
2016/01/26 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
JQuery toggle使用分析
2009/11/16 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
jquery.messager.js插件导致页面抖动的解决方法
2013/07/14 Javascript
js和jquery如何获取图片真实的宽度和高度
2014/09/28 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
js实现符合国情的日期插件详解
2017/01/19 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
[03:40]DOTA2英雄梦之声_第01期_炼金术士
2014/06/23 DOTA
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
简单的Python的curses库使用教程
2015/04/11 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
Pycharm更换python解释器的方法
2018/10/29 Python
python 实现二维列表转置
2019/12/02 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
可靠的数据流传输TCP
2016/03/15 面试题
自我鉴定的范文
2013/10/03 职场文书
面试后感谢信怎么写
2014/02/01 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
创先争优活动心得体会
2014/09/04 职场文书
员工年终考核评语
2014/12/31 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
关于python爬虫应用urllib库作用分析
2021/09/04 Python
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技