-1

重複の可能性:
Ajax で非同期とはどういう意味ですか?
jQuery ajax 戻り値

その一部としてjQuery 関数 ( ) を含む関数を実行しようとしていますが、それgetJson()を実行すると、JavaScript 関数が. getJson が順番に呼び出されない理由とその修正方法を知りたいです。getJson()

function getUsers(screen_name){
user_list=[]  
var id_list =[]

    $.getJSON(url,  function(json)
    {   
        //do stuff here, I have breakpoint #1 here
    });

    return user_list //breakpoint #2 is here
}

コンソールから実行する場合:getUsers('myUser')最初にブレークポイント #2 に到達し、次にブレークポイント #1 に到達します。

4

1 に答える 1

2

getJSON()デフォルトでは非同期です。つまり、それを呼び出すだけで操作が開始され、残りの JavaScript は引き続き実行されます。しばらくして、非同期操作が終了し、返されたデータを使用して成功ハンドラーが呼び出されます。

返されたデータにアクセスする必要があるコードは、成功ハンドラーまたは成功ハンドラーから呼び出す関数のいずれかにある必要があります。非同期関数を使用して、user_listしようとしているようなものを返すことはできません。

user_list代わりに、 を使用するコードが成功ハンドラー内にある、または成功ハンドラーから呼び出されるように、コードの編成方法を再考する必要があります。

getJSON()同期に設定することもできますが、これは通常、JavaScript でプログラミングするのに不適切な方法です。これは、ネットワーク呼び出し中にブラウザーがロックされ、一般的にユーザー エクスペリエンスが低下するためです。代わりに、非同期であることを処理するようにコードを適切に記述すれば、ブラウザーは ajax 呼び出しの全期間にわたって完全にインタラクティブな状態を保ちます。

于 2012-07-26T20:57:20.877 に答える