2009-06-14 1 views
4

jQueryのgetJSONメソッドを待つ方法はありますが解析されますか?

私はこの機能で受け取ったデータを、解析し、特定の文字列が含まれている場合だけ真/ falseを返したいです。しかし、非同期データ処理のため、これは簡単ではないようです。ここでは、コードスニペットである:THIDコード後

contained = false; 

$.getJSON(URL, function (data) { 
    $.each(data, function(i, item) { 
     if (item.Info.code == code) contained = true; 
    }); 
}); 

、このコードが中に配置された機能は、getJSONがまだ終了していないので、「含まれる」値、whisは、基本的に偽で返します。

答えて

6

あなたはこのように、同期要求をやってみてください:適切な解決策は、(これは可能ですが、お勧めできません)、それは同期作っていません

$.ajax({ 
     type: "GET", 
     url: "www.foo.com", 
     data: data 
     async: false, 
     dataType: "json" 
    }); 
+0

hereは、人々がそんなにJavaScriptでコールバックを抵抗する理由を私は知らない、数秒+1 – ichiban

8

。それは適切にコールバックを使用しています。非同期プログラミングは慣れていますが、それだけの価値があります。

の代わりに:

function foo() 
{ 
    ... 

    contained = false; 

$.getJSON(URL, function (data) { 
     $.each(data, function(i, item) { 
      if (item.Info.code == code) contained = true; 
     }); 
    }); 

    // Do something with contained 
} 

行います

function getContained(containedCallback) 
{ 
    $.getJSON(URL, function(data) 
    { 
    var contained = false; 
    $.each(data, function(i, item) { 
     if (item.Info.code == code) contained = true; 
    }); 
    containedCallback(contained); 
    } 
); 
} 

function foo() 
{ 
    ... 
    getContained(function(contained) 
    { 
    // Do something with contained 
    }); 
} 
+1

+1で私を倒す... –

+0

おっと、私は見たことがないJavaScriptが同じように使用しましたこの前に。私はこの答えのためだけにこの質問を好んだ。 – Strawberry

5

は、あなたの答えをいただき、ありがとうございます。私はちょうどプロセスを同期に設定しました:

$.ajaxSetup({'async': false}); 

その後、自分のコードを使用しました。うまく働く!

もっとjQueryのAjaxのオプション

+0

チップをありがとう、私は迅速な修正が必要であり、非同期はこの状況で私に余分なパフォーマンスを与えるつもりはありません。 – Shard

+0

ありがとうございます! –