我一直在处理连续的AJAX调用。我想从我的系统中得到的是,首先执行第一个调用,成功后,以指定的时间延迟打印所有消息,一旦打印出所有响应消息,就为下一个AJAX请求调用其他方法,等等。下面是我的AJAX处理程序代码:
function addNewFootballCat(action) {
if($("#categories_id_dropdown").val() == "" || $("#categories_id_dropdown").val() == 0 || $("#categories_id_dropdown").val() == null) {
alert("Please select category");
return false;
}
else{
var selected_cat_id = $("#categories_id_dropdown").val();
$("#waitingcategoryinsert").css('display','block');
$.ajax({
url: 'fun.php',
type: 'get',
dataType: "html",
async : false,
data: "cat_id="+selected_cat_id+"&action="+action ,
success: function(jsondata){
var data = $.trim(jsondata);
var data_array = data.split(',');
var created_cat_msg_array = [];
$.each( data_array, function( key, value ) {
if (value.indexOf('already_exist') > -1) {
v = value.replace('already_exist', '');
var map = confirm('Do you really want to map '+v+' with '+v+' category?');
if(map == true){
alert('mapped');
}else{
alert('not mapped');
}
} else {
created_cat_msg_array.push(value);
}
});
i = 0;
interval = setInterval(function(){
if(i > created_cat_msg_array.length)
clearInterval(interval);
$("#waitingcategoryinsert span").html(created_cat_msg_array[i++]);
}, 1000);
},
complete: function() {
//for Kid categories-products
addNewKidCat('create_kid_sub_category');
}
});
}
}
function addNewKidCat(action) {
if($("#categories_id_dropdown").val() == "" || $("#categories_id_dropdown").val() == 0 || $("#categories_id_dropdown").val() == null) {
alert("Please select category");
return false;
}
else{
var selected_cat_id = $("#categories_id_dropdown").val();
$("#waitingcategoryinsert").css('display','block');
$.ajax({
url: 'fun.php',
type: 'get',
dataType: "html",
async : false,
data: "cat_id="+selected_cat_id+"&action="+action ,
success: function(jsondata){
var data = $.trim(jsondata);
var data_array = data.split(',');
var created_cat_msg_array = [];
$.each( data_array, function( key, value ) {
if (value.indexOf('already_exist') > -1) {
v = value.replace('already_exist', '');
var map = confirm('Do you really want to map '+v+' with '+v+' category?');
if(map == true){
alert('mapped');
}else{
alert('not mapped');
}
} else {
created_cat_msg_array.push(value);
}
});
i = 0;
interval = setInterval(function(){
if(i > created_cat_msg_array.length)
clearInterval(interval);
$("#waitingcategoryinsert span").html(created_cat_msg_array[i++]);
}, 1000);
},
complete: function() {
//for training kit categories-products
addNewTrainingCat('create_training_sub_categories');
}
});
}
}
function addNewTrainingCat(action) {
if($("#categories_id_dropdown").val() == "" || $("#categories_id_dropdown").val() == 0 || $("#categories_id_dropdown").val() == null) {
alert("Please select category");
return false;
}
else{
var selected_cat_id = $("#categories_id_dropdown").val();
$("#waitingcategoryinsert").css('display','block');
$.ajax({
url: 'fun.php',
type: 'get',
dataType: "html",
async : false,
data: "cat_id="+selected_cat_id+"&action="+action ,
success: function(jsondata){
var data = $.trim(jsondata);
var data_array = data.split(',');
var created_cat_msg_array = [];
$.each( data_array, function( key, value ) {
if (value.indexOf('already_exist') > -1) {
v = value.replace('already_exist', '');
var map = confirm('Do you really want to map '+v+' with '+v+' category?');
if(map == true){
alert('mapped');
}else{
alert('not mapped');
}
} else {
created_cat_msg_array.push(value);
}
});
i = 0;
interval = setInterval(function(){
if(i > created_cat_msg_array.length)
clearInterval(interval);
$("#waitingcategoryinsert span").html(created_cat_msg_array[i++]);
}, 1000);
},
complete: function() {
//for training kit categories-products
addNewAccessoriesCat('create_accessories_sub_categories');
}
});
}
}
function addNewAccessoriesCat(action) {
if($("#categories_id_dropdown").val() == "" || $("#categories_id_dropdown").val() == 0 || $("#categories_id_dropdown").val() == null) {
alert("Please select category");
return false;
}
else{
var selected_cat_id = $("#categories_id_dropdown").val();
$("#waitingcategoryinsert").css('display','block');
$.ajax({
url: 'fun.php',
type: 'get',
dataType: "html",
async : false,
data: "cat_id="+selected_cat_id+"&action="+action ,
success: function(jsondata){
var data = $.trim(jsondata);
var data_array = data.split(',');
var created_cat_msg_array = [];
$.each( data_array, function( key, value ) {
if (value.indexOf('already_exist') > -1) {
v = value.replace('already_exist', '');
var map = confirm('Do you really want to map '+v+' with '+v+' category?');
if(map == true){
alert('mapped');
}else{
alert('not mapped');
}
} else {
created_cat_msg_array.push(value);
}
});
i = 0;
interval = setInterval(function(){
if(i > created_cat_msg_array.length)
clearInterval(interval);
$("#waitingcategoryinsert span").html(created_cat_msg_array[i++]);
}, 1000);
}
});
}
}
下面是PHP代码:
if ($action == 'create_football_sub_categories') {
echo 'first pessage,';
echo 'first pessage1';
}
if ($action == 'create_kid_sub_category') {
echo 'second passage,';
echo 'second passage1';
}
if ($action == 'create_training_sub_categories') {
echo 'third passage,';
echo 'third passage1';
}
if ($action == 'create_accessories_sub_categories') {
echo 'fourth passage,';
echo 'fourth passage1';
}
现在的问题是,它正确地执行了所有操作,但它没有打印所有消息,我真的不知道背后的原因。提前谢谢。
AJAX是一个异步请求,这意味着您的一些请求将比其他请求有更多的延迟。
我已经解决了这个问题。问题出在间隔功能上。我已将其替换为:
$.each(created_cat_msg_array, function(key,value) {
setTimeout(function(){
$("#waitingcategoryinsert span").html(value);
},2000 + ( i * 2000 ));
i=i+1;
});