[英]Put an ajax in a for statement in jquery
我想在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。 我该怎么办?
您需要将$ .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
}
});
AJAX是异步操作,因为它不知道服务器何时响应该请求。 这就是为什么它返回一个Promise的原因,它需要在代码中处理。
For循环同时触发n个AJAX请求并完成,并且不等待请求完成。 如果要一个接一个地运行请求,请在success
回调中执行该请求,或者更有效地实施一个.done
promise处理程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.