【问题标题】:how to fix jquery global array?如何修复 jquery 全局数组?
【发布时间】:2014-05-04 10:38:09
【问题描述】:

我在循环外创建了一个数组并在循环内添加了它的值,而不是在循环外打印使用它。 这是我的代码,帮帮我。

$(文档).ready(函数() { 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({ 方法:“POST”, 网址:“kv_load.php”, 数据:{ id:usr_id,tbl_name:'kv_'+tabs_name[value]}, 成功:功能(响应){ if(response == null || response =="" ) { } else { var obj = jQuery.parseJSON(响应); ax = jQuery.parseJSON(obj.x_coordinate); if (ax!==null && ax.length!== 0) { var len_x =ax.length; } 别的 { len_x = 0 ; } tab_order.push({ table: tabs_name[value], size: len_x }); } }, 失败:函数(){ alert('保存数据失败。'); } }); }); $.each(tab_order, function (index, value) { 警报(value.table +':'+ value.size); }); });

这里的“tab_order”是我的数组变量,我从dom准备好的开始声明它,并在每个函数内添加项目,然后我出来打印数组,但结果是空的。不清楚的可以告诉我,我会详细解释。

感谢您的所有回答,我的问题终于在这里解决了。有以下答案,

【问题讨论】:

  • 因为ajax是Asynchronous你可以设置async : false
  • 谢谢,它成功了。我可以要您的联系方式社交 ID、fb、twitter 或 skype。吗?
  • @MohammadAdil - eeeck。不要设置async: false。这是一个非常糟糕的做法,因为它在 ajax 调用期间锁定了浏览器。正确的答案是使用正确的异步编程。更多解释请参见How to return the response from an AJAX call?。

标签: jquery arrays


【解决方案1】:

对于异步响应(这是您通过 Ajax 调用获得的),您必须在 ajax 调用的完成处理程序中对响应数据进行所有处理。如果您想等到所有 ajax 调用完成后再处理所有结果,那么您必须检查每个完成处理程序是否是最后一个,如果是,则处理数据。这样,无论 ajax 响应的时间如何,您都会知道它们现在都已完成。

请不要在您的 Ajax 调用中使用 async: false。这将在 ajax 调用运行时锁定浏览器(它不处理任何事件或运行任何 javascript)。这不会是一个很好的用户体验,在慢速网络或服务器响应缓慢的情况下甚至更糟。正确的异步编程不需要设置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 中的 deferred/promises 功能来帮助我们在多个异步操作完成时得到通知,如下所示:

$(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 );
        });
    });
});

【讨论】:

    【解决方案2】:

    请尝试解决

    $(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. ');
          }
        });         
      }); 
    });
    

    也请看一下图片。

    【讨论】:

    • 感谢您花时间回答我的问题。它对我有用。
    猜你喜欢
    • 1970-01-01
    • 2019-09-11
    • 2017-12-20
    • 1970-01-01
    • 2020-10-11
    • 2021-04-10
    • 2011-07-13
    • 2023-04-05
    • 2019-09-17
    相关资源
    最近更新 更多