我有一个循环,我希望它在ajax每次循环结束时运行 这可能吗?
for(var i = 1; i <20; i ++){
if(keepruning = 1){
keepruning = 0;$ .post(“getname.php”,{id:myarr [i]}) .done(function(data){ keepruning = 1 });
}
这就像我得到的那样......但这不起作用 任何帮助都会非常有用;
答案 0 :(得分:3)
jQuery ajax
默认为{async:true}
,因此请求剂量先前的请求响应
您应该使用$.ajax({...})
而不是$.post
,以便在参数中添加{async:false}
喜欢
$.ajax({
url : "xyz.php",
async : false,
dataType : json
success : function(data){
//code here
}
});
您还可以全局添加{async:false}
。
注意:这适用于在页面
上定义的所有ajax函数$.ajaxSetup({async:false});
答案 1 :(得分:1)
要按照您尝试的方式执行此操作,您需要一个递归函数,因为默认情况下$ .post是异步的。
(function proceed(i) {
$.post('getname.php', {id: myarr[i]}).done(function(data) {
if (++i < 20) proceed(i);
});
}(0));
但在这之前你应该考虑一下。简单的并行请求不会解决问题吗?
您也可以发出同步请求,但我不建议这样做。
答案 2 :(得分:0)
for (var i=1;i<20;i++){
if (keepruning = 1) {
keepruning = 0;
$.ajax({
url: "getname.php",
type: "post",
async: false,
data:{ id: myarr[i] },
success: function (data) {
keepruning = 1;
},
error : function (data) {
keepruning = 0;
}
});
}
}
这是一种方式,同步ajax
答案 3 :(得分:0)
使用async : false
冻结浏览器,这不是一个好的解决方案。如果它是你的prlbem,你也可以使用自调用函数来进行循环:
loop(0)
function loop(i){
$.post( "getname.php", { id: myarr[i] } ) .done(function(){
if(i < 20) loop(i++)
});
}