我一直致力于连续的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';
}
现在的问题是,它正在正确执行所有操作,但它并不打印所有消息,我真的不知道背后的原因。提前谢谢。
答案 0 :(得分:0)
AJAX是一个异步请求,意味着您的某些请求会比其他请求有更多延迟。
答案 1 :(得分:0)
我已经解决了这个问题。问题出在区间功能上。我已将其替换为:
$.each(created_cat_msg_array, function(key,value) {
setTimeout(function(){
$("#waitingcategoryinsert span").html(value);
},2000 + ( i * 2000 ));
i=i+1;
});