Как исправить глобальный массив JQuery?

0

Я создал массив вне цикла и добавил его значение внутри цикла, чем я не могу использовать его вне цикла. вот мой код, помогите мне.

 

$(document).ready(function() {
    var usr_id = $("#user_id").val();
    var tabs_name = new Array("full_body", "hand_uper_limb", "lower_trunk" , "spine" , "upper_trunk") ; 
    var tab_order = new Array();    
    $.each(tabs_name , function(value) {    
        $.ajax({
            method: "POST",
            url: "kv_load.php", 
            data: { id: usr_id,  tbl_name : 'kv_'+tabs_name[value]},
            success: function(response) {              
                if(response == null || response =="" ) { } else {               
                    var obj = jQuery.parseJSON(response);
                    ax = jQuery.parseJSON(obj.x_coordinate);                    
                    if (ax!==null && ax.length!== 0) {
                        var len_x =ax.length; 
                    } else {
                        len_x =  0 ; 
                    }               
                    tab_order.push({    table: tabs_name[value],  size:  len_x });
                }                       
            },
            failure: function() {
                alert('failed to save your datas. ');
            }
        });         
    }); 
    $.each(tab_order, function (index, value) {
        alert( value.table + ' : ' + value.size );
    });
});

Здесь "tab_order" - это моя переменная массива, я объявлял ее с начала dom ready, и добавляю элементы внутри каждой функции, после чего я выхожу для печати массива, но это приводит к пустым. Если вы не поняли, скажите мне, что я объясню подробно.

Спасибо за все ваши ответы. Наконец, моя проблема решена здесь. с ниже ответами,

  • 0
    потому что ajax является Asynchronous вы можете установить async : false
  • 0
    Спасибо, это сработало. Могу ли я иметь ваш контактный социальный идентификатор, фб, твиттер или скайп?
Показать ещё 1 комментарий
Теги:
arrays

2 ответа

0
Лучший ответ

попробуйте его для разрешения

$(document).ready(function() {
  var usr_id = $("#user_id").val();
  var tabs_name = new Array("full_body", "hand_uper_limb", "lower_trunk" , "spine" , "upper_trunk") ; 
  var tab_order = new Array();   
  $.each(tabs_name , function(value) {    
    $.ajax({
      method: "POST",
      url: "kv_load.php", 
      data: { id: usr_id,  tbl_name : 'kv_'+tabs_name[value]},
      success: function(response) {              
        if(response == null || response =="" ) { } else {               
          var obj = jQuery.parseJSON(response);
          ax = jQuery.parseJSON(obj.x_coordinate);                    
          if (ax!==null && ax.length!== 0) {
            var len_x =ax.length; 
          } else {
            len_x =  0 ; 
          }               
          tab_order.push({    table: tabs_name[value],  size:  len_x });
          // if all responses have now been received, 
          // the results are all here and can now be processed
          if (tab_order.length === tabs_name.length) {
            var deferred = $.Deferred();
            $.each(tab_order, function (index, value) {
              alert( value.table + ' : ' + value.size );
            });
            deferred.resolve();
            deferred.promise().done(function(){tab_order=[]});
          }
        }                       
      },
      failure: function() {
        alert('failed to save your datas. ');
      }
    });         
  }); 
});

пожалуйста, посмотрите на изображение.

Изображение 174551

  • 0
    Спасибо, что нашли время ответить на мой вопрос. Это сработало для меня.
0

С асинхронными ответами (которые вы получаете с вызовами Ajax), вы должны выполнить всю обработку данных ответа в обработчике завершения для вызова ajax. Если вы хотите подождать до тех пор, пока все вызовы ajax не будут выполнены до обработки всех результатов, тогда вы должны проверить каждый обработчик завершения, если это последний, и если да, то выполните обработку данных. Таким образом, независимо от времени ответа ajax, вы узнаете, что все они теперь сделаны.

Не используйте async: false с вашими вызовами Ajax. Это заблокирует браузер (он не обрабатывает никаких событий или не запускает какой-либо javascript), пока выполняется вызов ajax. Это не будет хорошим пользовательским интерфейсом и даже хуже в медленных сетях или если сервер не реагирует. Правильное асинхронное программирование не требует установки async: false.

Здесь один из способов решить проблему путем проверки в каждой функции завершения Ajax, если все результаты были собраны сейчас (например, последний вызов Ajax завершен). Если да, то обрабатывайте результаты. Вот как выглядит этот код:

$(document).ready(function() {
    var usr_id = $("#user_id").val();
    var tabs_name = new Array("full_body", "hand_uper_limb", "lower_trunk" , "spine" , "upper_trunk") ; 
    var tab_order = new Array();    
    $.each(tabs_name , function(value) {    
        $.ajax({
            method: "POST",
            url: "kv_load.php", 
            data: { id: usr_id,  tbl_name : 'kv_'+tabs_name[value]},
            success: function(response) {              
                if(response == null || response =="" ) { } else {               
                    var obj = jQuery.parseJSON(response);
                    ax = jQuery.parseJSON(obj.x_coordinate);                    
                    if (ax!==null && ax.length!== 0) {
                        var len_x =ax.length; 
                    } else {
                        len_x =  0 ; 
                    }               
                    tab_order.push({    table: tabs_name[value],  size:  len_x });
                    // if all responses have now been received, 
                    // the results are all here and can now be processed
                    if (tab_order.length === tabs_name.length) {
                        $.each(tab_order, function (index, value) {
                            alert( value.table + ' : ' + value.size );
                        });
                    }
                }                       
            },
            failure: function() {
                alert('failed to save your datas. ');
            }
        });         
    }); 
});

Кроме того, в jQuery можно использовать функции отложенных/обещаний, чтобы помочь нам получить уведомление, когда несколько асинхронных операций завершены следующим образом:

$(document).ready(function() {
    var usr_id = $("#user_id").val();
    var tabs_name = new Array("full_body", "hand_uper_limb", "lower_trunk" , "spine" , "upper_trunk") ; 
    var tab_order = new Array();    
    var promises = [];
    $.each(tabs_name , function(value) {    
        var jqXHR = $.ajax({
            method: "POST",
            url: "kv_load.php", 
            data: { id: usr_id,  tbl_name : 'kv_'+tabs_name[value]},
            success: function(response) {              
                if(response == null || response =="" ) { } else {               
                    var obj = jQuery.parseJSON(response);
                    ax = jQuery.parseJSON(obj.x_coordinate);                    
                    if (ax!==null && ax.length!== 0) {
                        var len_x =ax.length; 
                    } else {
                        len_x =  0 ; 
                    }               
                    tab_order.push({    table: tabs_name[value],  size:  len_x });
                }                       
            },
            failure: function() {
                alert('failed to save your datas. ');
            }
        });
        promises.push(jqXHR);
    }); 
    $.when.apply($, promises).done(function() {
        $.each(tab_order, function (index, value) {
            alert( value.table + ' : ' + value.size );
        });
    });
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню