0

このコードはハングします。

無名関数の応答は、外側のスコープに接続されていない新しい変数であるためだと確信しています。これを解決するにはどうすればよいですか?

function foo() { //...

    var url = "http://urliciously-urlish-url"
    response = null;
    $.get(url, function (data) {response = data;
                               });

    while( response === null)
    {
        1;
    }
    console.log(response);

    //...
}

注:この設計では (ポーリング システムの場合と同様に) 応答が非 null になるまでページがハングすることを認識しています。この文脈ではOKです。

4

3 に答える 3

3

$.get非同期です。これを本当に同期させたい場合は、次の$.ajax関数を使用する必要があります。

$.ajax({
    url: url,
    async: false,
    success: function(data) {
        response = data;
    }
});

そうは言っても、私は cHao に同意します。非同期コードの記述に慣れる必要があります。

于 2012-04-18T18:18:39.423 に答える
1

コードが実行されている間、イベント ハンドラーは実行されません。

翻訳: このコードは機能しません。

JS を使用する場合は、ほぼ確実に非同期コードの記述に慣れる必要があります。

于 2012-04-18T18:17:19.493 に答える
0

いいえ、問題は、JS スレッドがまだ実行されているため、コールバックが実行されないことです。「次のティック」(ここではコールバック) の実行に進む前に、現在のコンテキストが終了するのを待ちます。ティックの間に DOM を更新し、他のことを処理することもあります。

ハンギング ループを使用する代わりに、同期 ajax リクエストを使用します(可能です)。jQuery の場合: {async:false}. ただし、リクエストが終了するまで「のみ」ハングしますが、これはおそらく発生しません。無責任な GUI は最悪の事態ですので、使用しないでください。

于 2012-04-18T18:18:04.743 に答える