我想在php for循环语句中调用jquery ajax。我的代码就像:
for(i=0;i<selectedStudents.length;i++){
console.log(selectedStudents[i]);
var userId=selectedStudents[i][13];
console.log(userId);
console.log(i);
$.ajax({
type: "POST",
url: "http://10.10.212.50:8080/.../member/add",
contentType: 'application/json',
data: '{"requester": { "userName": "' + AdminUsername + '", "password": "' + AdminPass + '" },"request":{"taskId": ' + taskId + ',"userId":' + userId + '} }',
dataType: "json",
success: function (GetResult) {
console.log(GetResult);
if (GetResult.result) {
swal("تمام", "افزودن کاربر به گروه کاری، با موفقیت انجام شد!!.", "success")
console.log(i);
console.log(selectedStudents);
var memberString='<li style="background-color: #39CCCC;border-color: #0c0c0c; " class="list-group-item row">'+
'<div class="row">'+
'<h4 class="col-md-9" style=" text-align:center; vertical-align:middle;">'+selectedStudents[i][1]+'" " '+selectedStudents[i][2]+'</h4>'+
'<div class="col-md-3">'+
'<img class="img-responsive" src="'+selectedStudents[i][0]+'">'+
'</div>'+
'<input id="'+userId+'firstName" type="text" style="display:none" value="'+selectedStudents[i][1]+'">'+
'</div>'+
' </li>';
$("#"+taskId+"hiddenMemberLI").after(memberString);
} else {
sweetAlert("خطا", "افزودن کاربر به گروه کاری، با مشکل رو به رو شده است!!", "error");
}
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
})//end ajax
}//end for
当我看到console.log()s的结果时,我首先看到所有for循环,然后ajax运行。这意味着当代码想要运行时,例如selectedStudents[i][0]
i超出范围。
我必须再打电话给ajax。 我该怎么办?
答案 0 :(得分:0)
您需要将$ .ajax与async:false选项
一起使用$.ajax({
type: "POST",
url: "http://10.10.212.50:8080/.../member/add",
contentType: 'application/json',
data: '{"requester": { "userName": "' + AdminUsername + '", "password": "' + AdminPass + '" },"request":{"taskId": ' + taskId + ',"userId":' + userId + '} }',
dataType: "json",
async: false,
success: function (GetResult) {
//your logic
}
});
答案 1 :(得分:0)
AJAX是一种异步操作,因为它不知道您的服务器何时响应请求。这就是为什么它返回一个需要在代码中处理的承诺。
For循环同时触发n个AJAX请求并完成,并且不会等待请求完成。如果您想逐个运行请求,请在<button>
回调中执行此操作,或者更有效地实现success
承诺处理程序。