浅谈js的ajax的异步和同步请求的问题

 更新时间:2016年10月07日 12:01:42   投稿:jingxian  
下面小编就为大家带来一篇浅谈js的ajax的异步和同步请求的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

先来看以下代码:

var flag=true;
var index=0;
$.ajax({
  url: "https://www.jb51.net/",
  success: function(data){
    flag=false;
  }  
});
while(flag){
  index++;
}
alert(index);

请问最后alert的index的结果是多少?

可能有人会说0呗。实际上却没那么简单。大家可以自己试试看。可以看到最终程序进入了一个死循环!怎么会这样呢!

我们在看一段代码:

var flag=true;
$.ajax({
  url: "https://www.jb51.net/",
  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://www.jb51.net/",
  async:false,
  success: function(data){
    flag=false;
  }  
});
while(flag){
  index++;
}
alert(index);

async默认是true,也就是异步,我们设置为false,即为同步。这时我们再看看结果吧。

以上就是小编为大家带来的浅谈js的ajax的异步和同步请求的问题全部内容了,希望大家多多支持脚本之家~

相关文章

  • 详解javascript表单的Ajax提交插件的使用

    详解javascript表单的Ajax提交插件的使用

    本文主要介绍了javascript表单的Ajax提交插件的使用,具有一定的参考价值。下面跟着小编一起来看下吧
    2016-12-12
  • javascript模拟枚举的简单实例

    javascript模拟枚举的简单实例

    本篇文章主要是对javascript模拟枚举的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-03-03
  • 谈谈JS中的!!

    谈谈JS中的!!

    !!一般用来将后面的表达式强制转换为布尔类型的数据(boolean),也就是只能是true或者false。下面看看通过本文给大家介绍了JS中的!!,需要的朋友参考下吧
    2017-12-12
  • JavaScript动画原理之如何使用js进行动画效果的实现

    JavaScript动画原理之如何使用js进行动画效果的实现

    在现在做页面很多时候都会用上动画效果,比如下拉菜单,侧边搜索栏,层的弹出与关闭等等,下面这篇文章主要给大家介绍了关于JavaScript动画原理之如何使用js进行动画效果实现的相关资料,需要的朋友可以参考下
    2023-04-04
  • Javascript实现登录框拖拽效果

    Javascript实现登录框拖拽效果

    这篇文章主要为大家详细介绍了Javascript实现登录框拖拽效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • JavaScript之浏览器对象_动力节点Java学院整理

    JavaScript之浏览器对象_动力节点Java学院整理

    JavaScript可以获取浏览器提供的很多对象,并进行操作。下面通过本文给大家介绍JavaScript之浏览器对象的相关知识,一起看看吧
    2017-07-07
  • Javascript数组的 splice 方法详细介绍

    Javascript数组的 splice 方法详细介绍

    这篇文章主要介绍了Javascript数组的splice方法详细介绍,splice方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组
    2022-09-09
  • js实现表单项的全选、反选及删除操作示例

    js实现表单项的全选、反选及删除操作示例

    这篇文章主要介绍了js实现表单项的全选、反选及删除操作,结合实例形式分析了基于dedecms后台使用js实现表单项的全选、反选及删除相关操作技巧,需要的朋友可以参考下
    2020-06-06
  • javascript实现发送短信验证码案例

    javascript实现发送短信验证码案例

    这篇文章主要为大家详细介绍了javascript实现发送短信验证码案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • checkbox勾选判断代码分析

    checkbox勾选判断代码分析

    我们在做项目的时候,特别是注册用户的时候,基本上都需要有注册协议之类的东西,那么我们如何判断用户是否勾选了同意了此协议呢?
    2014-06-06

最新评论