浅谈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中通过URL传递汉字的方法
Apr 09 Javascript
jQuery UI库中dialog对话框功能使用全解析
Apr 23 Javascript
老生常谈JQuery data方法的使用
Sep 09 Javascript
bootstrap多种样式进度条展示
Dec 20 Javascript
js实现键盘自动打字效果
Dec 23 Javascript
Javascript封装id、class与元素选择器方法示例
Mar 13 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
Aug 08 jQuery
Vue keep-alive实践总结(推荐)
Aug 31 Javascript
微信小程序scroll-x失效的完美解决方法
Jul 18 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
Mar 12 Javascript
vue el-table实现行内编辑功能
Dec 11 Javascript
微信小程序聊天功能的示例代码
Jan 13 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
PHP 基于文件头的文件类型验证类函数
2012/05/01 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
2014/10/31 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
python笔记(2)
2012/10/24 Python
Python中下划线的使用方法
2015/03/27 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
python中pip的安装与使用教程
2018/08/10 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
Python实现分数序列求和
2020/02/25 Python
Python中内建模块collections如何使用
2020/05/27 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
党员创先争优活动总结
2014/05/04 职场文书
怎样写观后感
2015/06/19 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP