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

  • 相关阅读:
    Azkaban的使用
    Azkaban安装
    Kafka 启动失败,报错Corrupt index found以及org.apache.kafka.common.protocol.types.SchemaException: Error reading field 'version': java.nio.BufferUnderflowException
    Kafka 消费者设置分区策略及原理
    Kafka利用Java API自定义生产者,消费者,拦截器,分区器等组件
    zookeeper群起总是有那么几个节点起不来的问题解决
    flume 启动agent报No appenders could be found for logger的解决
    Flume 的监控方式
    Flume 自定义 组件
    Source r1 has been removed due to an error during configuration java.lang.IllegalArgumentException: Required parameter bind must exist and may not be null & 端口无法连接
  • 原文地址:https://www.cnblogs.com/itgezhu/p/10687352.html
Copyright © 2011-2022 走看看