2012-01-11 9 views
4

私は問題javascript関数でjsonオブジェクトを返す方法は?

$(function(){ 
    var tags = getTags('0'); 
}); 

としてこの関数を呼んでいる

function getTags(level){ 
    $.getJSON("php/get-tags.php", { "parent": level }, function(json) { 
     return json; 
    }); 
} 

この機能をしましたが機能getTags()に復帰json

{"tags":["Mathematics","Science","Arts","Engineering","Law","Design"]}

のようなものです、あります戻り値をキャッチしてvar tags = getTags('0')になると、undefined値。

値を正しく返さないのですか?

+1

が重複する可能性のようにそれに対処することができ(http://stackoverflow.com/questions/7779697/javascript -asynchronous-return-value-with-jquery) –

答えて

5

すでに説明したように、ajaxリクエストはデフォルトで非同期で実行されます。だからあなたはそれを適切な方法で処理する必要があります。あなたができることは、jXHRオブジェクトを返すことです。このオブジェクトは、jQuery約束メーカでも構成されています。それは

function getTags(level){ 
    return $.getJSON("php/get-tags.php", { "parent": level }); 
} 

ようlookeし、[jQueryを使ったJavaScriptの非同期戻り値/割り当て]の

$(function(){ 
    getTags('0').done(function(json) { 
     // do something with json 
    }); 
}); 
1

AJAXコールから戻ることはできません。それは非同期です。コールバックに返されたデータを扱うすべてのロジックを持つ必要があります。

1

getJSONは非同期で、HTTP応答が返ってコールバックをトリガするまでに呼び出された関数は終了しています。

返品することはできません。

コールバックを使用して、データの処理を行います。

2

非同期関数を同期的に呼び出そうとしています。

getTagsを呼び出すと、PHPページへの呼び出しがトリガーされます.JavaScriptがブロックされていると、サーバーがJSONで応答するまでページがハングします。ロジックを再考してコールバックをトリガする必要があります。

function getTags(level){ 
    $.getJSON("php/get-tags.php", { "parent": level }, function(json) { 
     //do something with the JSON here. 
    }); 
} 
1

このように機能する必要がある場合は、getTags関数が値を返す必要があります。それは現時点ではありません。 $.ajaxを使用し、asyncfalseに設定すると、これを達成できます。

+2

'async:false'は、AJAX呼び出しが完了するまでブラウザ全体をロックアップします。 –

+0

うーん。はい。それがOPが望んでいるものなら..? – bububaba

+1

私はそれが悪いことを意味しました。ユーザーがブラウザがクラッシュしたと思うかもしれないからです。 –

関連する問題