2009-07-12 14 views
2

私はWebアプリケーションを作成しており、$ .getJSON()メソッドを使用して取得しているパラメータを初期化する必要があります。これらの値は、スクリプト全体でグローバルに使用され、($ .getJSON(ののみ実装)私はドキュメントで見つけることができるのである)に直接イベントをトリガーすることはありませんので、今

$.getJSON("../config/", function(data) 
{ 
    console.debug(data); 
} 

、どのように私は返すことができますまたはこのコールバックデータを取得しますか?

+1

$ .getJSON第2引数は、コールバック関数です。このコールバック関数は、リクエストが完了して成功すると呼び出されます。 –

+0

getJSONのデータで何をしたいですか? – txwikinger

答えて

15

あなたの最良の賭けは、コールバックテクニックに固執することです。

実際に動作させるには2つの方法がありますが、どちらも本質的に同じです。

$.getJSON("../config/", function(data) { 
     SomeObject.config = data; 
     SomeObject.load(); # assuming load tells some-object that it now has data and to get cracking 
}); 

または同期の方法で.getJSONを$使用しようと

$.getJSON("../config/", function(data) { 
     SomeObject.load(data); # SomeObject sets itself up and starts doing its thing 
}); 

(すなわち:それは値を返すもの)のみ使用して、両方のあなた人々のための涙と悲惨に終了します同期接続はUI全体をブロックする傾向があるためです。 :)

それはこのような何かをやって、現状では

非同期

var i = null;        #1 
$.getJSON("../config/", function(data) { #2 
     i = data;       #3 
});          #4 
some_function_with(i);      #5 

ライン5は、ほぼ3

+0

あなたはちょうど私に大きなお手伝いをしました。 upvoteを持ってください! – Daishiman

+0

同期要求に関するすべての警告を保護します。本当に必要な場合は、「下位レベル」$ .ajax({...、dataType: "json"、async:false)}を使用する必要があります。 。上記の例では、#5より前の#3の実行が保証されます。 –

3

ケントフレドリックラインの前に実行することが保証されているため、動作しません。私はわからないんだけど

var my_data = null; 

$.ajax(
{ 
    url: "../config/", 
    dataType: "json", 
    async: false, 
    success: function(data) 
    { 
     my_data = data; 
    } 
}); 

またリッチありがとう:あなたのアプローチが良いかもしれない場合は、あなたの方法がある場合は、より良いとさせて頂いておりますので、私はそれをやった方法をどのように知っていると私は自分の上にあなたのソリューションを受け入れるだろうが、これはありますすなわち、私は、関数の外の変数をリターンなしに置き換えることが可能であるかどうか分からなかった。

+0

同期要求がブラウザをブロックするため、サーバのタイムアウトが発生した場合、ブラウザがハングアップする可能性があります。同期要求が行われている間、ページはユーザーの入力に応答しません。 –

+0

@Kent:ブラウザをブロックしません。同期要求と標準の標準ページ負荷との間には違いはありません。もしあなたがAJAXを介して引っ張っているデータが重大なものであれば、私は同期要求を避ける理由は全く見当たりません。おそらくこの時間中にユーザーが入力を望んではいけません! –

+0

私はまっすぐドキュメントを取っています: "同期要求は一時的にブラウザをロックし、要求がアクティブな間は何の動作も無効にすることに注意してください。 http://api.jquery.com/jQuery.ajax/ はい、違いはありますが、同期要求はインライン