2012-04-20 71 views
2

我無法將元素推送到作品數組中。控制檯日誌返回合適的對象,但他們不會被推到陣列...這裏是我的代碼:Javascript推送方法不起作用

var works = new Array(); 
    $(window).ready(function() 
    {  

     $.getJSON('AJAX/getWorks.php', function(data) { 
      $.each(data, function(key, val) { 
      console.log(val); 
      works.push(val); 
      }); 
     }); 
     console.log(works); 
    }); 

而且JSON對象:

Object 
date: "2012-04-08 17:53:58" 
description: "sadasd" 
id: "2" 
link: "sadasd" 
name: "dsad" 
objects: null 
position: "2" 
__proto__: Object 

任何人都看到我在做什麼錯誤?在此先感謝您的答案...

+0

丟失的右括號是複製/粘貼錯誤嗎? – 2012-04-20 16:29:23

+1

你怎麼知道他們不在陣列中?你在哪裏輸出數組?你確定你沒有在ajax請求完成之前記錄數組嗎? – 2012-04-20 16:30:09

+0

如果將調試語句更改爲'console.log(val,works)',該怎麼辦? – apsillers 2012-04-20 16:30:30

回答

5

您在代碼中提前記錄數組。 console.log將在ajax請求完成之前運行,因爲ajax是異步的。

$.getJSON('AJAX/getWorks.php', function(data) { 
       $.each(data, function(key, val) { 
       console.log(val); 
       works.push(val); 
       }); 
       console.log(works); // move this here so the array is logged after the ajax request finishes. 
      }); 

編輯

如果你想使用該變量Ajax請求後,你可以做以下

創建一個函數來容納Ajax請求

function getWorks() 
{ 
    return $.getJSON('AJAX/getWorks.php', function(data) { 
       $.each(data, function(key, val) { 
       works.push(val); 
       }); 
} 

然後你就可以請執行以下操作以確保ajax請求已完成。

$.when(getWorks()).then(function(){ 
    // you can access the array in here because the ajax has finished executing 
}); 
+2

是的,在AJAX調用完成之前,OP中的日誌代碼正在運行。 – jmoerdyk 2012-04-20 16:40:40

+0

不,我不這麼認爲......我記錄在document.ready中,在getJson函數後面,所以對象必須已經初始化... – hjuster 2012-04-20 16:41:09

+0

沒有人看我的例子嗎?你讓人難以置信!正是這個例子減去JSON(它不能被正確測試)並且包括全局變量。嘖。 – rlemon 2012-04-20 16:47:48