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

时间:2014-04-24 13:29:22

标签: javascript php jquery ajax

我一直致力于连续的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';
  }

现在的问题是,它正在正确执行所有操作,但它并不打印所有消息,我真的不知道背后的原因。提前谢谢。

2 个答案:

答案 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;
});