2012-12-12 89 views
7

我一直在試圖讓一個循環推()方法來建立一個結構如下:推數組的Javascript(jQuery的)陣列

var locations2 = [ 
    ['User', position.coords.latitude, position.coords.longitude, 1], 
    ['Bondi Beach', -33.890542, 151.274856, 2], 
    ['Coogee Beach', -33.923036, 151.259052, 3], 
    ['Cronulla Beach', -34.028249, 151.157507, 4], 
    ['Manly Beach', -33.80010128657071, 151.28747820854187, 5], 
    ['Maroubra Beach', -33.950198, 151.259302, 6] 
]; 

這是我的代碼:

var locations = []; 

$.ajax({ 
    type: "POST", 
    url: "/ajax/map.php", 
    data: "name=test", 
    dataType: "json", 
    cache: false, 
    success: function(data){ 
     $.each(data.points, function(i,item){ 
      array_push = ["test", parseFloat(item.origem_lat), parseFloat(item.origem_lng), i]; 
      locations.push(array_push); 
     });    
    } 
}); 

但是,位置的Javascript console.log顯示一個空數組。

我試圖以許多不同的方式使用push(),但我無法獲得與locations2相同的結構。這裏最大的問題是我不知道有多少數組將在循環前位於數組中,所以我無法事先初始化它。

有什麼想法?

+1

你的語法看起來不錯 - 你確定'data.points'包含你期望的數組嗎? – McGarnagle

+1

將錯誤回調添加到您的ajax調用中。它可能會引發錯誤,但您可能不知道此代碼。 –

+0

您可以使用警報(JSON.stringify(x))快速轉儲數組內容,其中x是有問題的數組。 – RonaldBarzell

回答

4

我想出了問題所在。它與push()方法本身無關。顯然,ajax調用不是按順序執行的(這是它的異步原因)。我在ajax調用選項中添加了async:false,現在一切正常。

謝謝大家的意見。

+4

'async:false'擊敗了使用**異步JavaScript和XML **的全部目的。你會遇到像掛起頁面等問題,因爲你的請求現在被阻止。也許可以查看延期對象** http://api.jquery.com/category/deferred-object/ – Aesthete

+0

+1提到延期。值得一提的是,這裏有一點點的學習曲線,但它們並不算太差,而且非常適合這類情況。 – lbstr