浅谈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插件jbox使用iframe关闭问题
Feb 09 Javascript
jQuery中attr()方法用法实例
Jan 05 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
Aug 11 Javascript
当jquery ajax遇上401请求的解决方法
May 19 Javascript
Vue.js使用v-show和v-if的注意事项
Dec 13 Javascript
Bootstrap php制作动态分页标签
Dec 23 Javascript
js控制按钮,防止频繁点击响应的实例
Feb 15 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
Feb 17 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
Apr 14 Javascript
vue权限管理系统的实现代码
Jan 17 Javascript
js实现图片实时时钟
Jan 15 Javascript
在Chrome DevTools中调试JavaScript的实现
Apr 07 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中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
PHP sprintf()函数用例解析
2011/05/18 PHP
PHP中Array相关函数简介
2016/07/03 PHP
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
vue刷新和tab切换实例
2018/02/11 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
js编写简易的计算器
2020/07/29 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
Python3中多线程编程的队列运作示例
2015/04/16 Python
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
简单实现python进度条脚本
2017/12/18 Python
Python 读写文件的操作代码
2018/09/20 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
html5 canvas实现跟随鼠标旋转的箭头
2016/03/11 HTML / CSS
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
关于Java finally的面试题
2016/04/27 面试题
师范生自荐信范文
2013/10/06 职场文书
交通安全演讲稿
2014/01/07 职场文书
小学二年级学生评语
2014/04/21 职场文书
创业计划书之网络外卖
2019/10/31 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle