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

本文探讨了Ajax请求中同步与异步的区别,重点讲解了async参数的作用及影响。通过实例说明了同步请求如何阻塞代码执行流程,并指出其限制与潜在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//遇到的问题,在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等方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值