2013-04-02 50 views
54

我使用getJSON從我的網站請求JSON。它的偉大工程,但我需要將輸出保存到另一個變量,像這樣:jQuery getJSON保存結果到變量

var myjson= $.getJSON("http://127.0.0.1:8080/horizon-update", function(json) { 

       }); 

我需要將結果保存到myjson但似乎這個語法是不正確的。有任何想法嗎?

+0

只需刪除'VAR myjson =' – Cristy

+0

看一看[如何返回從函數的AJAX調用的響應?](http://stackoverflow.com/questions/14220321/how-to-返回從一個函數調用ajax函數) - 至少它應該給你正確的想法如何解決這個問題。語法btw是有效的,它只是不做你想要的。 –

回答

57

只有在回覆後才能致電getJSON,您無法獲得價值。

var myjson; 
$.getJSON("http://127.0.0.1:8080/horizon-update", function(json){ 
    myjson = json; 
}); 
+3

這個問題是由於計時問題,'var myjson'在下一行不可用。 –

+2

@JanDvorak是的,請求是異步執行的,如果你需要'json'數據繼續,你應該在設置'myjson'變量後調用其他代碼。作爲解決方案,它可以像來自Ravi answer的「callbackFuncWithData」,或者只是調用另一個函數。 – webdeveloper

+1

一旦你這樣做,真的沒有理由把myjson聲明在外面。把它作爲參數傳遞給回調函數。 –

20

$ .getJSon希望將回調函數傳遞給回調函數,或者在回調函數中將其分配給全局變量。

var globalJsonVar; 

    $.getJSON("http://127.0.0.1:8080/horizon-update", function(json){ 
       //do some thing with json or assign global variable to incoming json. 
       globalJsonVar=json; 
      }); 

IMO最好是調用回調函數。這對眼睛更可讀,可讀性更強。

$.getJSON("http://127.0.0.1:8080/horizon-update", callbackFuncWithData); 

function callbackFuncWithData(data) 
{ 
// do some thing with data 
} 
+3

我不認爲第一個解決方案會起作用。 .getJSON是異步的,所以你不能訪問任何外部變量。你需要做的是在低級別設置async:false ajax – lngs

+2

@ngs:不,它會工作。回調函數是*閉包*,可以訪問在更高範圍中定義的所有變量。當*訪問變量時,您仍然必須小心,即在您調用'$ .getJSON'後不能立即訪問它。在這種情況下,你真的不得不做出同步請求。 –

+2

那你怎麼知道ajax調用何時完成,響應數據有多大?你仍然需要使用回調函數來完成它。 – lngs