JQuery — несколько запросов PHP Ajax с каждым циклом

У меня есть этот код:
Он приходит после некоторых запросов, и это работает отлично.
Первый ajax-запрос также работает нормально, но после каждого цикла второй запрос выполняться не будет.
ИДК почему, надеюсь, у кого-то есть решение.

                        alert("success");               // Everything is OK
$( ".nrlist-create_item-select" ).each(function() {
var item_id = $( this ).attr('id');
var item_name = $( this ).attr('title');

$.ajax({
type: "POST",
url: "games/create-nr_vs_nr-update.php",
datatype: "text",
data: {item_id: item_id, item_name: item_name, nrlistcreatenumber: nrlistcreatenumber, nrlistcreatetime: nrlistcreatetime},
success: function(data) {
alert(data);
requestCallback.requestComplete(true);
}
});

return true;
});

$.ajax({
type: "POST",
url: "games/create-nr_vs_nr-insert.php",
datatype: "text",
data: {item_id: item_id, item_name: item_name, nrlistcreatenumber: nrlistcreatenumber, nrlistcreatetime: nrlistcreatetime},
success: function(data) {
alert(data);
requestCallback.requestComplete(true);
}
});

1

Решение

var item_id;
var item_name;

Эти переменные, похоже, не определены для второго вызова ajax. И помните, что javascript является асинхронным, он не будет ждать завершения вашего первого вызова ajax, прежде чем вызовет второй. Если вам нужно, чтобы это произошло, взгляните на отложенные объекты jquery.

3

Другие решения

Вы должны создать функцию цикла следующим образом:

$ajaxsend=function(data,$arrayitems,url,total,ini){
$.ajax({
type: "POST",
url: url,
datatype: "text",
data: data,
success: function(data) {
console.log(data);
//requestCallback.requestComplete(true);
//ini increment each loop
ini+=1;
//validate loop while total is > than ini
if(total > ini){
data = {item_id: $arrayitems[ini].item_id, item_name: $arrayitems[ini].item_name, nrlistcreatenumber: nrlistcreatenumber, nrlistcreatetime: nrlistcreatetime};
//resend ajax call
$ajaxsend(data,$arrayitems,url,total,ini);
}
}
});
};
var $arrayitems = [];
$( ".nrlist-create_item-select" ).each(function() {
var item_id = $( this ).attr('id');
var item_name = $( this ).attr('title');
//save items in array
$arrayitems.push({"item_id":item_id,"item_name":item_name});
//return true;
});
//initial
var ini = 0;
//total items
var total = $arrayitems.length;
//data
var data = {item_id: $arrayitems[ini].item_id, item_name: $arrayitems[ini].item_name, nrlistcreatenumber: nrlistcreatenumber, nrlistcreatetime: nrlistcreatetime};
//ajax for loop function
$ajaxsend(data,$arrayitems,'games/create-nr_vs_nr-update.php',total,ini);
0

По вопросам рекламы [email protected]