2014-02-06 49 views
-1

我在使用jQuery ajax調用構建的javascript內的數組時遇到問題。我可以創建數組,並知道它存在於jquery函數中,因爲我可以將其記錄在瀏覽器控制檯中。在函數運行後,我沒有選擇它,因爲它在crews = loadCrews()之後返回undefined 。這是我主要的JavaScript文件:Javascript和JQuery數組變量

$(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

閱讀本文http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call – Misters

回答

0

Ajax調用是異步的,這意味着的JavaScript將繼續執行,而不是等待Ajax調用先完成。這意味着變量crews被賦值爲一個尚不存在的值(因爲在變量賦值時ajax調用沒有完成)。

您可以使用一個promise分配值當Ajax調用完成後,或只是將值賦給船員變量的ajax成功回調內部

0

您從$ .getJSON內因而沒有返回項目正在由loadCrews返回,因此crews = nothing ='undefined'。爲了解決這個問題,你可以在getJSON函數之外移動聲明var item = []。祝你好運!

+0

@Pierre也是對的,你需要等待ajax調用在項目準備返回之前完成。 – clancer