-4

重複の可能性:
return AJAX callback return

AJAX を使用して JQuery コードを作成しましたが、すべての努力 ( $.post$.get および を $.ajax試行) にもかかわらず、応答を取得することも、コードで使用することもできません。コード例:

var r = $.post("ajaxpage.php", function(data) {return data});
console.log(r); // nothing
4

1 に答える 1

4

Javascript と AJAX に関する初心者プログラマーの最も一般的な誤解の 1 つは、AJAX 要求を「通常の」関数として扱い、変数の割り当てを行うか、コードで AJAX 応答をすぐに使用することを期待することです。

ただし、それは機能しません。正しい実装がどのように機能するかを理解しようとしましょう。

AJAXはAsynchronous JavaScript and XMLの略です 。

XML の部分 ( を介してリクエストがどのように処理されるかについての詳細) はしばらく無視XMLHttpObjectます

AJAX について次のように考えてみてください。これは、仕事中に仕事の電子メールを同僚に送信し、情報を提供するようなものです。実行するアクションおよび/またはその他の情報を要求する。友達がすぐに応答するかどうかに関係なく、応答が遅れる可能性があるため、仕事を続行する必要があります (友人は今日特に忙しい可能性があります)。友達が関連情報を答えてくれたらあなたはその問題に対処し、適切な行動を取ります。アクションが要求された場合、同僚はあなたのメールを受け取ったときにのみそれを実行します。

AJAX も同様の方法で動作します。クライアント側からサーバー側のページにリクエストを送信し、アクション(データベースに行を書き込むなど) または応答(ページからサーバー側でフェッチされたデータの一部)を期待します。呼んでいます。

重要な点は、クライアント (JS はクライアント側で実行されることを思い出してください) がサーバー (遅いサーバー) に対して AJAX 呼び出しを行うときに大幅な遅延が発生する可能性があるため、ラウンドトリップの完了に関係なく、JavaScript コードが実行を継続することです。 、接続が遅いなど)。

したがって、次のようなことは期待できません。

var r = $.post("ajaxpage.php", function(data) {return data});

$.post「通常の」関数のように実際には値を「返さない」ため、変数rは $.post で評価できません

done代わりに、AJAX 呼び出しが完了した後に発生するイベントに基づいてコードを編成する必要がありますこれは、 (サーバー側のエラー、ページが見つからないなどの障害が発生していない場合) 実際に成功時にコードで使用する応答。そのイベントを使用して、応答をパラメーターとして受け取り、実際に使用する関数を呼び出すことができます。

$.post("ajaxpage.php").done(useMyResponse);
// rest of the code

function useMyResponse(response)
{
    // do fancy things with the response like:
    console.log(response); // works!
    // or maybe
    $("#someElement").html(response);
}

これを簡略化すると、次のようになります。

$.post("ajaxpage.php",function (response) { 
     // use response
     console.log(response);
});

編集:私は英語のネイティブ スピーカーではありません。間違いをお許しください。

于 2012-06-21T21:09:36.950 に答える