连续的ajax请求无法正常工作


Successive ajax requests are not working properly

我一直在处理连续的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;
});