3

非同期のgetリクエストを作成し、それぞれに提供する入力に基づいて異なる結果を取得したいと思います。これが私のコードです:

param=1;
$.get('http://localhost/my_page_1.php', param, function(data) {
   alert("id = "+param);
   $('.resul   5.t').html(data);
});

param=2;
$.get('http://localhost/my_page_2.php', param, function(data) {
   alert("id = "+param);
   $('.result').html(data);
});

両方のリクエストの結果は次のとおりです。"id=2"結果を次のようにします。最初のリクエストは"id= 1"、2番目のリクエストは "id=2"です。

1つのHTMLファイルで多くのリクエストに対してこれを実行し、準備ができたらすぐに結果をHTMLに統合したいと思います。

誰かが私がこの問題を解決するのを手伝ってくれる?

4

2 に答える 2

3

呼び出しは非同期であるため、上記のすべての行がすでに実行されるまで、コールバックは実行されません。これは、最初のgetリクエストが解決される前に、paramが値2に設定されることを意味します。

paramを再割り当てするだけでなく、param1、param2などの変数に一意の名前を作成します。

編集:

このコードをチェックしてください:

    for (var i = 0 ; i < 3; i++) {
        param = i;
        $.get('http://www.google.com',genCallback(param));
        param = i+5;
    }

    function genCallback(param) {
        var cb = function (data) {
            alert(param);
        }
        return cb;
    }

正直なところ、私はそれがどのように機能するのかよくわかりません。paramを絶えず変更しているにもかかわらず、0、1、2の番号に何らかの順序でアラートが表示されることに気付くでしょう。getで匿名関数を直接作成する代わりに、パラメーターに基づいて関数を作成します。私が思うに、クロージャが作成されcb、実行時にgenCallbackのローカルパラメータが含まれます。

于 2010-05-21T19:00:53.183 に答える
1

AJAX 関数を呼び出すと、そのリクエストのコールバックが残りのコードと同期せずに処理されます。リクエストが終了したときに呼び出されるように指定された関数が、リクエストが終了する前に呼び出されていません。

これは、コードが最も頻繁に機能する方法です (AJAX の非同期性のため)。

  1. param = 1最初の ajax リクエストを設定して送信します
  2. param = 22 番目の ajax リクエストを設定して送信します
  3. 最初の get コールが終了しました。この呼び出しのコールバックが処理されます。あなたのparam変数は2になりました
  4. 2 番目の get 呼び出しが終了しました。この呼び出しのコールバックが処理されます。あなたのparam変数はまだ2

解決策は、呼び出しごとに異なる変数を使用するかparam、最初の呼び出しのコールバック関数内で 2 番目の ajax 呼び出しをインクリメントして送信することです。

于 2010-05-21T19:04:38.120 に答える