在jquery中的a语句中放入ajax

时间:2017-01-07 11:42:59

标签: javascript php jquery ajax for-loop

我想在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。 我该怎么办?

2 个答案:

答案 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承诺处理程序。