Javascript 将Ajax函数转换为循环
我请求您回答我遇到的一个问题(部分是数组):Javascript 将Ajax函数转换为循环,javascript,jquery,ajax,loops,Javascript,Jquery,Ajax,Loops,我请求您回答我遇到的一个问题(部分是数组): for(i=1;i由于AJAX调用是异步的,所以所有回调都在循环之后运行 可以使用函数表达式为每次迭代创建单独的变量: for(i=1;i<part.length;i++){ $("#content").append('<div id="id' + i + '"></div>'); (function(i){ $.get('ajax.php?id=' + i, function(data) {
for(i=1;i由于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);
});
for(i=1;i由于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);
});
对于(i=1;iGuffa,他的答案应该有效,您也可以使用-version并将async参数设置为false。查看文档了解如何使用它
编辑:需要注意的是,使用async:false
是一种不好的做法,将被弃用。Guffa他的答案应该有效,您也可以使用-version并将async参数设置为false。查看文档了解如何使用它
编辑:需要注意的是,使用async:false
是一种不好的做法,将被弃用。或者,从服务器获取JSON并对其进行迭代:
$.get('ajax.php', { from: 1, to: 140 } ).done(function(data) {
$(data).each(function(index) {
//do something with this and index
});
});
通过这种方式,您可以在内部访问索引,并且只向服务器发出一个请求,因此不会污染网络。或者,从服务器获取JSON并对其进行迭代:
$.get('ajax.php', { from: 1, to: 140 } ).done(function(data) {
$(data).each(function(index) {
//do something with this and index
});
});
通过这种方式,您可以在内部访问索引,并且只向服务器发出一个请求,从而不会污染网络。请注意,您的循环将尝试在浏览器允许的情况下一次发出尽可能多的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);
}
});
var i=1;
(函数循环(){
如果(i<零件长度){
$(“#内容”)。附加(“”);
$.get('ajax.php?id='+i).done(函数(数据){
console.log(“缓存”+i);
$(#id+i).html(数据);
i++;
},回路);
}
});
请注意,您的循环将尝试在浏览器允许的情况下一次触发尽可能多的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);
}
});
var i=1;
(函数循环(){
如果(i<零件长度){
$(“#内容”)。附加(“”);
$.get('ajax.php?id='+i).done(函数(数据){
console.log(“缓存”+i);
$(#id+i).html(数据);
i++;
},回路);
}
});
async:false
是一种不好的做法,将会受到批评谢谢你通知我,我会编辑我的答案并把你的反馈放进去。这不仅仅是一种不好的做法和批评。在某些浏览器中,它根本不起作用。嗯,每天学习一些新东西。你想让我删除我的帖子吗?哪些浏览器不支持async=false?async:false
是一种不好的做法,将会遭到反对谢谢你通知我,我会编辑我的答案并把你的反馈放进去。这不仅仅是一种不好的做法和不赞成的做法。在某些浏览器中,它根本不起作用。嗯,每天学习一些新东西。你想让我删除我的帖子吗?哪些浏览器不支持async=false?阅读这一部分“在循环中创建闭包:常见错误”阅读“在循环中创建闭包:常见错误”一节