PHP闭包和异步,js中同步、闭包与异步请求结合的简单理解

本文探讨了在JavaScript中使用AJAX进行同步和异步请求时,如何处理回调函数和变量作用域的问题。当从同步切换到异步时,由于异步性质,导致后台接收到的数据和前端输出不一致。通过使用闭包来保存参数的引用,可以解决这个问题,确保后台接收的数据与前端输出保持一致。
摘要由CSDN通过智能技术生成

先看下同步的请求

后台收到的是0~10

ajax的回调输出的也是0~10for (var index = 0; index <= 10; index++) {

$.ajax({

async: false,//同步

url: '/HelloWorld',

type: 'POST',

dataType: 'html',

data: {index: index}

}).done(function () {

console.log(index);

})

}

a5661a2f3017afc87842c9f0f750b790.png

26a6a81d7dddf731f931e87b4e203c02.png

换成异步之后

后台收到的数据发生了变化 不是预期的0~10

9dc9590b3795c26581d79e53e89f60e3.png

ajax的回调输出的同样如此 变成了11个11

751b8c2074cdb5d81afde8c2119428c3.png

ajax执行的循序排在了for循环执行之后 i变成了11

需要在ajax执行时保持对i的引用才能达到预期的效果for (var index = 0; index <= 10; index++) {

(function (num) {//形参

$.ajax({

async: true,//异步

url: '/HelloWorld',

type: 'POST',

dataType: 'html'

})

.done(function () {

console.log(num);

})

})(index)//实参}

这样后台接收到的值 就可以和前台输出的值一致

先看下同步的请求

后台收到的是0~10

ajax的回调输出的也是0~10for (var index = 0; index <= 10; index++) {

$.ajax({

async: false,//同步

url: '/HelloWorld',

type: 'POST',

dataType: 'html',

data: {index: index}

}).done(function () {

console.log(index);

})

}

8453cdd6a7dd93281c8dca3a2de9d8df.png

ffc7cbc6316a6ffc6af19ddee933cb69.png

换成异步之后

后台收到的数据发生了变化 不是预期的0~10

c910f17b6786c032fac5dc315ae858c9.png

ajax的回调输出的同样如此 变成了11个11

0582553a07d660bbe8f1f61bbe7e66ab.png

ajax执行的循序排在了for循环执行之后 i变成了11

需要在ajax执行时保持对i的引用才能达到预期的效果for (var index = 0; index <= 10; index++) {

(function (num) {//形参

$.ajax({

async: true,//异步

url: '/HelloWorld',

type: 'POST',

dataType: 'html'

})

.done(function () {

console.log(num);

})

})(index)//实参}

这样后台接收到的值 就可以和前台输出的值一致

相关文章:

相关视频:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值