JavaScript-循环发送Ajax请求造成变量被替换的问题?

发布于 2016-10-15 08:40:35 字数 229 浏览 1102 评论 6

<script language="language">
for (var i = 0; i < 3; i++){
$.ajax({
url: "ajax.php",
success: function(data){
alert(i);
}
});
}
</script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

灵芸 2017-09-22 17:36:20

var i=0;
function ajax(i) {
$.ajax({
url: "aa.php?a="+Math.random(),
success: function(data){
alert(i);
if(i<2){
setTimeout(ajax(++i),500);
}

}
});

}
ajax(i);

这样不知道能不能满足你的要求

泛泛之交 2017-09-10 12:00:28

变量覆盖,想个办法别人覆盖不就行了。。

 for (var i = 0; i < 3; i++){
var a = new ajax(i);
a.send();
}

function ajax(i) {

this.count = i;
this.send = function(){
var _this = this;
$.ajax({
url: "test.php?a="+Math.random(),
success: function(data){
alert(_this.count);
}
});
}

}

ie6测试通过。没有装其他浏览器。。大家可以在其他浏览器上试试

灵芸 2017-07-21 05:33:01

可能我的办法不是最好的,但是应该是可行的:

 在for循环里到达ajax请求的时候把i变量值作为ajax的参数键值{num:i}直接发送,
返回时的json里直接
success: function(data){
alert(data.num); //在这里输出你要的1,2,3
}

当然应该从js的角度还有别的解决办法,我这个你就参考一下

归属感 2017-03-11 12:41:29

这里的问题是多个回调函数共享了变量i的作用域,所以最后只会调用i=3这个值,最好的方法肯定是采用闭包。

 <script language="language">
for (var i = 0; i < 3; i++){
$.ajax({
url: "ajax.php",
success: (function(x){ //这里将i封装到闭包传递到变量x
return function(data){
alert(x); //调用x = i #0,1,2
}
})(i),
error: function(){
alert(i); //这样使用必然返回i=3
}
});
}
</script>

夜无邪 2017-02-27 16:28:24

我发现用闭包的方式实现起来会更加灵活、代码也更精简

 <script language=javascript>
for (var i = 0; i < 3; i++){
(function(i){
$.ajax({
url: "ajax.php",
success: function(data){
alert(i);
}
});
})(i);
}
</script>

泛泛之交 2017-01-20 17:18:39

不要异步,测试通过:alert:0,1,2

for (var i = 0; i < 3; i++){
$.ajax({
async:false,
url: "./t.php",
success: function(data){
alert(i);
}
});
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文