`

ajax同步异步参数async(在debug下step by step运行正常,正常发布运行不正常)

    博客分类:
  • JS
阅读更多
//遇到的问题,在debug下step by step运行正常,正常发布运行不正常,ajax返回的数据有问题。在ajax中添加async: false,程序变正常
以下是知识点。

这其中涉及到代码的顺序问题,有时后台还未返回数据,但已执行后面代码,
所以就会造成取不到值

$.ajax({  
    type: "post",    
    url: "admin/PfmOptionRuleItem.do",  
    success: function(data){  
        $("#ruleItem").val(data.ruleItem);  //①  
    }  
});  
return $("#ruleItem").val();  //②  

如果①还未从后台返回数据 此时执行②就获取不到值

Ajax的第一个字母是asynchronous的开头字母,这意味着所有的操作都是并行的,完成的顺序没有前后关系。
$.ajax()的async参数总是设置成true,这标志着在请求开始后,其他代码依然能够执行。
如果把这个选项设置成false,这意味着所有的请求都不再是异步的了,这也会导致浏览器被锁死。
虽然官方不建议这么干,只是不能用太多,否则会造成用户体验不佳。

alert("setp 1");  
$.ajax({  
      url: "admin/PfmOptionRuleItem.do",  
      async: false,  
      success: function(data){  
          alert("hello ajax"); //①  
      }  
});  
alert("setp 2"); //②  

当把asyn设为false时,这时ajax的请求时同步的,也就是说,这个时候ajax块发出请求后,
他会等待在①这个地方,不会去向下执行②,直到①执行完毕
此时依次执行顺序为
setp 1
hello ajax
setp 2

如果async为true 则执行顺序为
setp 1
setp 2
hello ajax

总结一下:
1.ajax默认所有请求都是设置为异步的,如果需要同步,则设为false
2.如果请求是异步的,不能在回调之外直接拿到返回的data
3.如果设为同步的话,会阻塞后面的代码,也就是说如果这个请求需要执行30秒,就必须等30秒执行完之后,才能继续执行下面的
4.同步不支持跨域请求和数据类型:’jsonp'请求
5.如果将请求设置为同步的话,则不支持延迟方法,不能使用延迟方法$.Deferred,只能使用success/error/complete来代替比如deferred.always()/$.when等方法
分享到:
评论

相关推荐

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

    在本文中,我们将详细讲解在jQuery的ajax方法中如何使用async参数控制请求是同步还是异步。 首先,我们需要理解什么是同步和异步请求。异步请求是指当一个请求发送给服务器后,浏览器不会等待服务器的响应,而是...

    javascript发送ajax请求,获取返回值res,async 同步/异步

    javascript发送ajax请求,获取返回值res,async 同步/异步 var res = sendRequest({ url : "1.php", //necessary method : "post", params : { param1 : "123", param2 : "234" }, async : false });

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

    jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步。这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出现假死...

    jquery的ajax同步和异步的理解及示例

    之前一直在写JQUERY代码的时候遇到AJAX加载数据都需要考虑代码运行顺序问题。最近的项目用了到AJAX同步。这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX...

    jquery ajax 同步异步的执行 return值不能取得的解决方案

    在Web开发中,使用AJAX与服务器进行异步通信是常见的需求,jQuery为此提供了便捷的$.ajax()方法。但开发者们可能会遇到一个问题:在$.ajax()方法中,尽管我们试图通过return语句返回一些值,却常常发现这些返回值...

    关于解决jquery同步异步的问题

    需要注意的是,在异步模式下,由于`alert(a);`语句会在`$.ajax()`请求完成之前被执行,因此`a`的值始终为1;而在同步模式下,`alert(a);`将会在`$.ajax()`完成后执行,此时`a`已经更新为服务器返回的数据。 #### ...

    解决js ajax同步请求造成浏览器假死的问题

    在正常情况下,我们推荐使用异步请求,因为它们不会阻塞用户界面,从而允许用户继续与页面上的其他元素交互。然而,在某些特定的场景中,开发者可能会选择同步请求。本文将探讨由同步AJAX请求造成的浏览器假死现象,...

    ExtJs Ajax 同步问题

    2. **回调处理**:在异步请求中,要处理服务器的响应,必须在回调函数中进行。确保你定义了一个合适的回调函数,并在其中处理数据。 3. **错误处理**:同时,也要关注`success`和`failure`回调,以便在请求成功或...

    jquery封装下的ajax同步加载代码实例

    AJAX允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容,提升了用户体验。以下是对"jquery封装下的ajax同步加载代码实例"的详细解释: 首先,jQuery的$.ajax()函数是进行AJAX请求的核心方法...

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

    异步(async=true)的AJAX请求会在后台发送请求,不阻塞其他JavaScript代码的执行。这意味着在请求的等待过程中,用户可以与页面的其他部分交互,浏览器也可以同时进行其他任务处理。异步操作的优点是用户体验好,对...

    extjs3.0 ajax 同步请求

    虽然同步 AJAX 请求在特定场景下非常有用,但考虑到它可能导致的性能问题和用户体验下降,建议仅在确实必要的场合使用。同时,在使用同步请求时要注意跨浏览器兼容性问题,并采取相应的解决方案。随着技术的发展,...

    一个基于C#+Ajax 实现的PostBack Async Callback 程序例子代码

    它允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容,从而提升了用户体验。本示例代码是基于C#编程语言,利用Ajax技术实现的PostBack Async Callback程序,这通常用于ASP.NET开发中。 在...

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

    Ajax代表了异步JavaScript和XML,它允许网页在不重新加载整个页面的情况下,更新网页的部分内容。Ajax的核心技术是XMLHttpRequest对象,这是一个预留给开发者使用的接口,可以通过JavaScript来开启一个服务器端请求...

    jquery ajax同步异步的执行最终解决方案

    标题中的知识点包括“jquery ajax 同步异步执行”的解决方案,即通过设置`async`属性的不同值来控制AJAX请求是同步执行还是异步执行。描述部分讲述了同步执行的一个关键点,即在AJAX请求完成前,程序会等待,不会...

    ajax同步异步简单实现

    AJAX(Asynchronous JavaScript and XML)是一种技术标准,允许网页异步加载数据,也就是说网页在不重新加载整个页面的情况下,对用户界面进行更新。它是一种在无需重新加载整个网页的情况下,能够更新部分网页的...

    Ajax-render_async.zip

    Ajax-render_async.zip,render_async允许使用ajax异步包含页面,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载...

    ajax00009_async_trigger

    在Web开发中,Ajax(Asynchronous JavaScript and XML)是一种创建动态网页的技术,允许在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容。这里提到的"ajax00009_async_trigger"是一个自定义的Ajax框架...

    ext-basex.js 进行Ext.Ajax.request 同步请求 FF无法正常

    然而,当设置`async: false`参数时,`Ext.Ajax.request`将变为同步请求。同步请求会使得浏览器在等待服务器响应之前挂起,直到收到回应或请求超时。这种方式在某些场景下是有用的,比如在需要确保数据加载完成后再...

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

    在异步模式下,由于Ajax请求返回的时间不确定,循环会不断执行,导致index变量不断增加,形成了死循环。而在同步模式下,由于JavaScript会等待Ajax请求完成,flag变量被设置为false后,循环会停止,从而避免死循环的...

    extjs ajax同步请求所需js

    总的来说,虽然同步Ajax请求在某些特定情况下有其用武之地,但在多数现代Web应用中,推荐使用异步请求配合回调函数或Promise来确保良好的用户体验。在实际开发中,应谨慎考虑是否使用同步请求,并充分评估其潜在影响...

Global site tag (gtag.js) - Google Analytics