我要求你回答我遇到的问题(部分是数组):
for(i=1;i<part.length;i++){
$("#content").append('<div id="id' + i + '"></div>');
$.get('ajax.php?id=' + i, function(data) {
console.log("cache" + i);
$("#id" + i).html(data);
});
});
问题是进入$.get
函数时,i值是循环结束时的I值。由于我的数组(部分)中有140行,我将始终为140,而不是1然后是2然后是3 ..
如何在ajax回调中获取i值?
感谢您的回复。
答案 0 :(得分:2)
或者,从服务器获取JSON并迭代它:
$.get('ajax.php', { from: 1, to: 140 } ).done(function(data) {
$(data).each(function(index) {
//do something with this and index
});
});
这样您就可以在内部访问索引,并且只会向服务器发出一个请求,从而不会污染网络。
答案 1 :(得分:0)
由于AJAX调用是异步的,所有回调都在循环之后运行。
您可以使用函数表达式为每次迭代创建单独的变量:
for(i=1;i<part.length;i++){
$("#content").append('<div id="id' + i + '"></div>');
(function(i){
$.get('ajax.php?id=' + i, function(data) {
console.log("cache" + i);
$("#id" + i).html(data);
});
})(i);
});
答案 2 :(得分:0)
请注意,您的循环将尝试在您的浏览器允许的情况下同时触发尽可能多的AJAX请求,但不保证它们将以任何特定顺序完成。
如果你真的必须发起140个AJAX请求,我建议这样做,而不是:
var i = 1;
(function loop() {
if (i < part.length) {
$("#content").append('<div id="id' + i + '"></div>');
$.get('ajax.php?id=' + i).done(function(data) {
console.log("cache" + i);
$("#id" + i).html(data);
i++;
}, loop);
}
});
答案 3 :(得分:-1)
Guffa他的答案应该有效,您也可以使用$.ajax - 版本并将async-parameter设置为false。查看文档以了解如何使用它。
编辑:应该注意的是,使用async: false
是一种不好的做法,将被弃用。