【问题标题】:Javascript and JQuery array variables [duplicate]Javascript和JQuery数组变量[重复]
【发布时间】:2014-02-06 22:16:58
【问题描述】:

我在使用从 jquery ajax 调用构建的 javascript 中的数组时遇到问题。我可以创建数组,并且知道它存在于 jquery 函数中,因为我可以将它记录在浏览器控制台中。但是,在函数运行后我没有拾取它,因为它在 crees = loadCrews() 行之后返回为未定义.这是我的主要 javascript 文件:

$(document).ready(function(){
     var crews = [];
    console.log("loading crews")
    crews = loadCrews();
   console.log(crews);

 $('#datetimepicker1').datetimepicker({
     pickTime: false
    });
 $('#datetimepicker2').datetimepicker({
       pickTime: false
    });

 $("#input_form").submit(function(){

     console.log(crews)
     var querystring = $(this).serialize();
             alert(querystring)
     return false;
         });

});

function loadCrews(){
 $.getJSON( "url", function( data ) {
    var items = [];
  $.each( data, function( key, val ) {
    items.push(val.UNID);
        })
     console.log(items)
    return items
 });   

};

更新 1:我在 ajax 请求上使用了回调,它开始变得有意义了。感谢所有的好读物。不幸的是,即使使用了 .done 回调,我仍然无法传回我的数组。

这是更新后的代码:

$(document).ready(function(){

        loadCrews();

 $('#datetimepicker1').datetimepicker({
     pickTime: false
    });
 $('#datetimepicker2').datetimepicker({
       pickTime: false
    });

 $("#input_form").submit(function(){
     var querystring = $(this).serialize();
             alert(querystring)

     return false;
         });

});

function loadCrews(){
    var url =  //url of service for all crew names
$.getJSON( url)
  .done(function( data ) {
      var crews = [];
    $.each( data, function( key, val ) {
        crews.push(val.UNID);
        })
    console.log(crews)
    return crews

  })
  .fail(function( jqxhr, textStatus, error ) {
    var err = textStatus + ", " + error;
    console.log( "Request Failed: " + err );
});
};

【问题讨论】:

标签: javascript jquery ajax arrays


【解决方案1】:

Ajax 调用是异步的,这意味着 javascript 将继续执行而不是等待 ajax 调用首先完成。这意味着,crews 变量被分配给一个尚不存在的值(因为在分配变量时 ajax 调用尚未完成)。

您可以在 ajax 调用完成时使用 promise 来分配值,或者只是将值分配给 ajax 成功回调中的变量组

【讨论】:

    【解决方案2】:

    您正在从 $.getJSON 内部返回项目,因此 loadCrews 没有返回任何内容,因此工作人员 = 没有 = '未定义'。要解决此问题,您可以将声明 var item = [] 移到 getJSON 函数之外。祝你好运!

    【讨论】:

    • @Pierre 也是对的,您需要等待 ajax 调用完成才能返回项目。
    猜你喜欢
    • 1970-01-01
    • 2013-07-15
    • 2015-12-31
    • 1970-01-01
    • 2013-01-16
    • 2016-11-02
    • 1970-01-01
    • 2020-03-28
    • 2013-09-03
    相关资源
    最近更新 更多