zoukankan      html  css  js  c++  java
  • AJAX中同步和异步的区别和使用场景

    一、简介
    Ajax请求最重要的问题是代码执行的顺序。最长遇到的问题是,我们定义一个变量接收ajax异步请求的返回结果,后续代码使用,然而后续代码在使用时该变量为初始值,始终得不到想要的结果!!!
    二、示例
    // 异步
    var email = "test@ptmind.com";
    console.log(1);
    jQuery.ajax({
    url: "/invite/sendEmailAjax.pt",
    type: "post",
    dataType: "text",
    async: true,
    data: "inviteEmails="+email,
    success: function(data){
    console.log(2);
    }
    });
    console.log(3);
    // 结果:1->3->2

    // 同步
    var email = "test@ptmind.com";
    console.log(1);
    jQuery.ajax({
    url: "/invite/sendEmailAjax.pt",
    type: "post",
    dataType: "text",
    async: false,
    data: "inviteEmails="+email,
    success: function(data){
    console.log(2);
    }
    });
    console.log(3);
    // 结果:1->2->3
    三、官方解释
    By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false.Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.

    sync默认是true,即为异步方式,$.ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.ajax里的success方法。若要将其设置为false,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。http://api.jquery.com/jQuery.ajax/
    ---------------------
    作者:奋飛
    来源:CSDN
    原文:https://blog.csdn.net/ligang2585116/article/details/45484619
    版权声明:本文为博主原创文章,转载请附上博文链接!

    AJAX中根据async的值不同分为同步(async = false)和异步(async = true)两种执行方式;在W3C的教程中推荐使用异步执行;

    下面来区别一下同步和异步有什么不同:

    异步:在异步模式下,当我们使用AJAX发送完请求后,可能还有代码需要执行。这个时候可能由于种种原因导致服务器还没有响应我们的请求,但是因为我们采用了异步执行方式,所有包含AJAX请求代码的函数中的剩余代码将继续执行。如果我们是将请求结果交由另外一个JS函数去处理的,那么,这个时候就好比两条线程同时执行一样。

    同步:在同步模式下,当我们使用AJAX发送完请求后,后续还有代码需要执行,我们同样将服务器响应交由另一个JS函数去处理,但是这时的代码执行情况是:在服务器没有响应或者处理响应结果的JS函数还没有处理完成return时,包含请求代码的函数的剩余代码是不能够执行的。就好比单线程一样,请求发出后就进入阻塞状态,知道接触阻塞余下的代码才会继续执行。

    如何选择同步还是异步模式?要回答这一问题,我们可以通过下面可能出现的问题来回答:

    我们在发送AJAX请求后,还需要继续处理服务器的响应结果,如果这时我们使用异步请求模式同时未将结果的处理交由另一个JS函数进行处理。这时就有可能发生这种情况:异步请求的响应还没有到达,函数已经执行完了return语句了,这时将导致return的结果为空字符串。
    ---------------------
    作者:SerenoShen
    来源:CSDN
    原文:https://blog.csdn.net/shenlei19911210/article/details/41964313

  • 相关阅读:
    常见字符编码扫盲(UTF,Unicode, GB2312) 四
    Ogre 实用技巧 四
    CEGUI中文显示问题的解决方法 四
    大幅革新 AMD下一代图形产品前瞻 四
    力争上游 ——我眼中的“计算机产业链” 四
    养成 SQL SERVER 的好习惯 四
    说说 Windows 中的中文字体 四
    Unicode字符集和多字节字符集关系 四
    各种电影 四
    [projectEuler.net]12
  • 原文地址:https://www.cnblogs.com/itgezhu/p/10687352.html
Copyright © 2011-2022 走看看