浅谈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小数四舍五入多种方法实现
Dec 23 Javascript
JS与C#编码解码
Dec 03 Javascript
JavaScript定义类的几种方式总结
Jan 06 Javascript
jquery对单选框,多选框,文本框等常见操作小结
Jan 08 Javascript
js操作table元素实现表格行列新增、删除技巧总结
Nov 18 Javascript
微信开发 使用picker封装省市区三级联动模板
Oct 28 Javascript
JavaScript仿微博输入框效果(案例分析)
Dec 06 Javascript
详解vue渲染函数render的使用
Dec 12 Javascript
为什么要使用Vuex的介绍
Jan 19 Javascript
小程序实现横向滑动日历效果
Oct 21 Javascript
JavaScript实现Tab选项卡切换
Feb 13 Javascript
vue组件是如何解析及渲染的?
Jan 13 Vue.js
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.MVC的模板标签系统(二)
2006/09/05 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
2014/01/14 PHP
php 发送带附件邮件示例
2014/01/23 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
处理文本部分内容的TextRange对象应用实例
2014/07/29 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
vue教程之toast弹框全局调用示例详解
2020/08/24 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
Node对CommonJS的模块规范
2019/11/06 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
Nodejs实现WebSocket代码实例
2020/05/19 NodeJs
Vuex的各个模块封装的实现
2020/06/05 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
python连接数据库的方法
2017/10/19 Python
Python实现购物车功能的方法分析
2017/11/10 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
Python爬虫工具requests-html使用解析
2020/04/29 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
瑞士最大的图书贸易公司:Orell Füssli
2019/12/28 全球购物
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
艺术设计专业个人求职信
2014/04/10 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书