每个循环有多个 ajax php 请求
multiple ajax php requests with each loop
我有这个代码:
它在一些 if 查询之后出现,并且效果很好。
第一个 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);
}
});
var item_id;
var item_name;
这些变量似乎没有为第二次 ajax 调用定义。请记住 javascript 是异步的,它不会等到您的第一个 ajax 调用完成后才调用第二个。如果您需要这样做,请查看 jquery 延迟对象。
你必须像这样创建一个循环函数:
$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);
我有这个代码: 它在一些 if 查询之后出现,并且效果很好。 第一个 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);
}
});
var item_id;
var item_name;
这些变量似乎没有为第二次 ajax 调用定义。请记住 javascript 是异步的,它不会等到您的第一个 ajax 调用完成后才调用第二个。如果您需要这样做,请查看 jquery 延迟对象。
你必须像这样创建一个循环函数:
$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);