ajax中的async属性值之同步和异步及同步和异步区别

jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步。这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出现假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。而异步则这个AJAX代码运行中的时候其他代码一样可以运行。

ajax中async这个属性,用于控制请求数据的方式,默认是true,即默认以异步的方式请求数据。

一、async值为true (异步)

当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程)

例如

$.ajax({
     type:"POST",
     url:"Venue.aspx?act=init",
      dataType:"html",
     success:function(result){  //function1()
       f1();
       f2();
    }
     failure:function (result) {
      alert('Failed');
     },
 }
 function2();

在上例中,当ajax块发出请求后,他将停留function1(),等待server端的返回,但同时(在这个等待过程中),前台会去执行function2()。

二、async值为false (同步)

当执行当前AJAX的时候会停止执行后面的JS代码,直到AJAX执行完毕后时,才能继续执行后面的JS代码。

例如

$.ajax({
     type:"POST",
     url:"Venue.aspx?act=init",
     dataType:"html",
     async: false,
    success:function(result){  //function1()
       f1();
       f2();
     }
    failure:function (result) {
      alert('Failed');
     },
 }
 function2(); 

当把asyn设为false时,这时ajax的请求时同步的,也就是说,这个时候ajax块发出请求后,他会等待在function1()这个地方,不会去执行function2(),直到function1()部分执行完毕。

Ajax同步与异步的区别

var returnValue = null;
xmlhttp = createXmlHttp();
xmlhttp.onreadystatechange = function() {
  if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    if (xmlhttp.responseText == "true") {
      returnValue = "true";
    }
    else {
      returnValue = "false";
    }
  }
};
xmlhttp.open("Post",url,true); //异步传输
xmlhttp.setRequestHeader("If-Modified-Since","0"); //不缓存Ajax
xmlhttp.send(sendStr);
return returnValue;

在异步时才可以用xmlHttpReq.onreadystatechange状态值!下面是异步和同步的不同调用方式:

Java

xmlHttpReq.open("GET",url,true);//异步方式
  xmlHttpReq.onreadystatechange = showResult; //showResult是回调函数名
  xmlHttpReq.send(null);
function showResult(){
  if(xmlHttpReq.readyState == 4){
   if(xmlHttpReq.status == 200){
   ******
   }
  }
}

Java

xmlHttpReq.open("GET",url,false);//同步方式
      xmlHttpReq.send(null);
      showResult(); //showResult虽然是回调函数名但是具体用法不一样~
function showResult(){
       //if(xmlHttpReq.readyState == 4){  这里就不用了,直接dosomething吧~
        //if(xmlHttpReq.status == 200){
          ******//dosomething
        //}
      //}
}
xmlhttp.open("Post",url,true);

如果是同步(false),返回值是true或false,因为执行完send后,开始执行onreadystatechange,程序会等到onreadystatechange都执行完,取得responseText后才会继续执行下一条语句,所以returnValue一定有值。

如果是异步(true),返回值一定是null,因为程序执行完send后不等xmlhttp的响应,而继续执行下一条语句,所以returnValue还没有来的及变化就已经返回null了。

所有如果想获得xmlhttp返回值必须用同步,异步无法得到返回值。

同步异步使用xmlhttp池时都要注意:取得xmlhttp时只能新建xmlhttp,不能从池中取出已用过的xmlhttp,因为被使用过的xmlhttp的readyState为4,所以同步异步都会send但不执行onreadystatechange。

(0)

相关推荐

  • jquery ajax属性async(同步异步)示例

    例1.jquery+ajax/" target="_blank">jquery ajax同步方式 复制代码 代码如下: $.ajax({url : 'test.php',type : 'post',async: false,//使用同步的方式,true为异步方式data : {'act':'addvideo', 'videoname':videoname},//这里使用json对象success : function(data){//code here...},fail

  • 细数Ajax请求中的async:false和async:true的差异

    实例如下: function test(){ var temp="00"; $.ajax({ async: false, type : "GET", url : 'userL_checkPhone.do', complete: function(msg){ alert('complete'); }, success : function(data) { alert('success'); temp=data; temp="aa"; } }); a

  • jQuery ajax 当async为false时解决同步操作失败的问题

    jQuery的ajax,当async为false时,同步操作失败.解决方案,jqueryasync 最近做项目遇到jQuery的ajax,当async为false时,同步操作失败的问题,上网搜索下,得到解决办法,这里就说下如何解决: 引发失败时代码: $.ajax({ url : 'your url', data:{name:value}, cache : false, async : true, type : "POST", dataType : 'json/xml/html', s

  • Ajax请求中async:false/true的作用分析

    本文实例分析了Ajax请求中async:false/true的作用.分享给大家供大家参考,具体如下: test.html代码: <a href="javascript:void(0)" onmouseover="testAsync()"> asy.js代码: function testAsync(){ var temp; $.ajax({ async: false, type : "GET", url : 'tet.php', com

  • 浅谈Jquery中Ajax异步请求中的async参数的作用

    之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html <a href="javascript:void(0)" onmouseover="testAsync()"> asy.js function testAsync{ var temp; $.ajax({ async: false, type : "GET", url : 'tet.php', complete: functi

  • jQuery中的ajax async同步和异步详解

    项目中有这样一个需求,使用ajax加载数据返回页面并赋值,然后前端取出该值 这其中涉及到代码的顺序问题,有时后台还未返回数据,但已执行后面代码, 所以就会造成取不到值 $.ajax({ type: "post", url: "admin/PfmOptionRuleItem.do", success: function(data){ $("#ruleItem").val(data.ruleItem); //① } }); return $(&quo

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

    先来看以下代码: var flag=true; var index=0; $.ajax({ url: "http://www.jb51.net/", success: function(data){ flag=false; } }); while(flag){ index++; } alert(index); 请问最后alert的index的结果是多少? 可能有人会说0呗.实际上却没那么简单.大家可以自己试试看.可以看到最终程序进入了一个死循环!怎么会这样呢! 我们在看一段代码: va

  • ajax中的async属性值之同步和异步及同步和异步区别

    jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出现假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除.而异步则这个AJAX代码运行中的时候其他代码一样可以运行. ajax中async这个属性,用于控制请求数据的方式,默认是true,即默认以异步的方式请求数据. 一.async值为true (异步) 当

  • JS实现查找数组中对象的属性值是否存在示例

    本文实例讲述了JS实现查找数组中对象的属性值是否存在.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script> var studentsArray = [ { "

  • 理解jquery ajax中的datatype属性选项值

    jquery中ajax的dataType属性用于指定服务器返回的数据类型,如果不指定,jQuery 将自动根据HTTP包MIME信息来智能判断,如果datatype选项不填写的话,会将返回的数据当成字符串处理. 一.ajax语法 复制代码 代码如下: jQuery.ajax([settings]) 参数说明 settings:用于配置 Ajax 请求的键值对集合.可以通过 $.ajaxSetup() 设置任何选项的默认值. 二.ajax的datatype选项的值 1."xml":返回

  • C#读取XML中元素和属性值的实现代码

    1.school.xml,如下: 复制代码 代码如下: <?xml version="1.0" encoding="UTF-8"?><!--启明培训学校学生信息:    1.一年级学生    2.二年级学生    -->  <school name="启明培训学校">    <grades>     <grade id="1" name="一年级">

  • Angular中使用$watch监听object属性值的变化(详解)

    Angular中的$watch可以监听属性值的变化,然后并做出相应处理. 常见用法: $scope.$watch("person", function(n, o){ //todo something... }) 但是对于一个对象中的某个属性值变化时,$watch似乎不管用了. 示例代码: <body> <div ng-controller="mainCtrl"> <input id="myText" type=&qu

  • java从list中取出对象并获得其属性值的方法

    最近公司的项目需要导出csv文件,一个同事用最原始的方式将每条记录取出然后加","解决.但是客户后面要求在每个页面当中都加入这个功能.于是,问题来了,分开写代码太多,合起来又不能确定在list中存储的对象为哪个对象,不能用get方法获得属性.我一直认为当初他那样写就将程序写死了.可是,在多次尝试后,还是通过java的反射从list中取出了对象,从对象中取出了属性值: 下面是代码: 复制代码 代码如下: package com.hb.test; import java.lang.refl

  • Vue 子组件更新props中的属性值问题

    目录 Vue子组件更新props的属性值 .sync属性 v-model应用 Vue子组件中修改Props的几种情况 针对以上几种情况再逐一进行分析 结果展示 结论 Vue子组件更新props的属性值 在子组件中更新props中的属性值,并且更新到父组件,有两种实现方式:.sync 和 自定义v-model .sync属性 父组件在给子组件传值时,属性名后需要加修饰符.sync,格式 :子组件props属性名.sync 父组件 <template> <div id="app&q

  • JS对象数组中如何匹配某个属性值

    目录 对象数组中匹配某个属性值 对象数组取出对象属性值完全一样的项 对象数组中匹配某个属性值 如果有一个js对象数组,一个变量如下 var a = [     {         'id' : 2,         'name' : 'xxxx',     },     {         'id' : 3,         'name' : 'bbbbb',     }, ]; var b = 3; 我想要查询 变量b,是否在数组a的id值中,如果在,返回true:不在,返回false 写法如

  • Angular.js指令学习中一些重要属性的用法教程

    Angular指令 定义一个指令的方法非常简单,只需要调用`directive`方法即可: var app=angular.module('myapp',[]); app.directive(name,fn) 1. 基础指令 var app=angular.module('myapp',[]); app.run(function($templateCache){ $templateCache.put('cache','<h3>模板内容来源于缓存</h3>') }); app.dir

  • js的[defer]和[async]属性

    [defer] 可以在<script>中加入defer属性,告诉浏览器这段script不必立即执行,那么浏览器就会在完全载入文档之后再执行这个script,相当于window.onload,但它比window.onload更灵活. 复制代码 代码如下: <script defer="true"></script> [async] 使用async属性加载JavaScript,这样整个脚本就可以异步加载和执行. <script>标签的defe

随机推荐