2013-04-02 15 views
54

getJSONを使用して自分のWebサイトから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-call-from-a-functionからの応答を返します) - 少なくとも、あなたは問題の解決方法を正しく理解する必要があります。構文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からの '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は非同期なので、外部変数に到達することはできません。あなたがしなければならないことは、低レベルのajaxで非同期:falseを設定することです。 – lngs

+2

@lngs:いいえ、動作します。コールバック関数は* closure *であり、より高いスコープで定義されたすべての変数にアクセスできます。変数にアクセスするときは*注意*する必要があります。つまり、 '$ .getJSON'を呼び出した直後に変数にアクセスすることはできません。その場合は、実際に同期要求を行う必要があります。 –

+2

それでは、ajaxコールがいつ終了し、応答データがどれくらい大きいかをどのように知ることができますか?それでもコールバック関数を使用する必要があります。 – lngs

関連する問題