浅谈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中的History历史对象
Jan 16 Javascript
Javascript 作用域使用说明
Aug 13 Javascript
JavaScript 代码压缩工具小结
Feb 27 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
May 18 Javascript
bootstrap监听滚动实现头部跟随滚动
Nov 08 Javascript
HTML5+jQuery实现搜索智能匹配功能
Mar 24 jQuery
requireJS模块化实现返回顶部功能的方法详解
Oct 16 Javascript
利用百度地图API获取当前位置信息的实例
Nov 06 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
Sep 07 Javascript
Vue和React组件之间的传值方式详解
Jan 31 Javascript
Vue 实现简易多行滚动"弹幕"效果
Jan 02 Javascript
JavaScript文档加载模式以及元素获取
Jul 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中文件缓存转内存缓存的方法
2011/12/06 PHP
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
node.js中watch机制详解
2014/11/17 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
python保存字符串到文件的方法
2015/07/01 Python
详解python编译器和解释器的区别
2019/06/24 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
python 多进程队列数据处理详解
2019/12/23 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
怎么处理XML的中文问题
2015/03/26 面试题
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
将相和教学反思
2014/02/04 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
中职生求职信
2014/07/01 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers