2013-01-17 58 views
2

這裏是我的腳本,我輸入到螢火蟲:

var jsonData; 

$.getJSON("./js/ohno.JSON",function(data){ 
    jsonData = data; 
}); 

console.log(jsonData); 

這裏的以.json文件內容:

{"oh":"no"} 

我第一次運行在Firebug的腳本,它返回 「未定義」

第二次運行它(不刷新頁面)它返回對象。

如果我刷新,同樣的事情發生 - 第一次運行返回「未定義」,第二次運行它返回對象。

的以.json文件

如何讓這個返回的對象,我第一次運行該腳本?

回答

9

getJSON是異步的;這意味着腳本執行將繼續,但仍會加載數據。

你必須等到它完成。

var jsonData; 

$.getJSON("./js/ohno.JSON",function(data){ 
    jsonData = data; 
    console.log(jsonData); 
}); 
4

您需要將回調函數內console.log(您想在data運行,任何其他代碼):

$.getJSON("./js/ohno.JSON",function(data){ 
    jsonData = data; 
    console.log(jsonData); 
}); 

您也可以使用.ajaxComplete如果你覺得有必要保持它分離。

3

getJSON是異步的,這就是爲什麼你必須提供回調來處理數據。該請求被解僱,但在您到達console.log時尚未完成,因此該值未定義。它稍後完成並設置變量。

將您的console.log處理程序移入您的回調中,並且所有應該按預期工作。

1

匿名function是異步回調,因此它被調用console.log。 這裏是做正確的方式:

var jsonData; 

$.getJSON("./js/ohno.JSON",function(data){ 
    jsonData = data; 
    console.log(jsonData); 
}); 
1

的功能的getJSON是異步的,所以成功的回調函數只有一次請求完成被執行。您的console.dir()在響應發生之前最初執行。

將console.dir()放入getJson處理程序函數中。

相關問題