Javascript和JQuery数组变量

时间:2014-02-06 22:16:59

标签: javascript jquery ajax arrays

我在使用jquery ajax调用构建的javascript中使用数组时遇到问题。我可以创建数组,并且知道它存在于jquery函数中,因为我可以在浏览器控制台中记录它。我不会在函数运行之后将其拾取,因为它在crews = loadCrews()行之后返回为undefined 。这是我的主要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 );
});
};

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您正在从$ .getJSON内部返回项目,因此loadCrews没有返回任何内容,因此crews = nothing ='undefined'。要解决此问题,您可以在getJSON函数之外移动声明var item = []。古德勒克!