4

重複の可能性:
AJAX 応答テキストを返すには?

私は、Ajaxリクエストを送信して応答を返すjavascriptメソッドを呼び出しています。「成功」のようなコールバックメソッドで結果を取得しています。
ここでは、Ajax が何らかの結果を返していますが、javascript メソッドが結果を返している間 (未定義のもの)。
ただし、ajax の結果のみを返す必要があります。
私が特定した問題は、Javascript と Ajax の両方が同時に実行されていることです。
それらを停止して最初にAjaxを実行する方法は、結果を返す関数に送信する必要があります。
どんなアイデアでも大歓迎です.. :)

4

1 に答える 1

8

デフォルトでは、$.ajax(および など、それを使用するものはすべて$.post) 非同期要求を行います。を指定することで、リクエストを同期させることができますasync:false(ドキュメントを参照)。ただし、パフォーマンスが低下し、ユーザー エクスペリエンスが低下するため、同期 AJAX 要求を使用することはお勧めしません。代わりに、結果が完了したときに成功ハンドラーで呼び出されるコールバックを使用することを検討してください。

以下は、任意の簡単な例を 2 つ示しています。ここでは、クリックしたときに AJAX 呼び出しの結果からテキストを置き換えたいアンカーがあります。どちらも同じことを行いますが、ブラウザーの応答性を維持するため、2 番目の方法が優先されます。

同期:

function invokeAjaxSync() {
   var text;

   $.ajax({url: '/path/to/resource', async:false, success: function(result) {
      text = result.toString();
   }}); // will wait until this call is complete

   return text;
}

$('a.example').click(function() {
    $(this).text(invokeAjaxSync()); // works, but the browser will be unresponsive while waiting for a response.
});

非同期(より良い):

function invokeAjaxAsync(callback) { 
   $.ajax({url:'/path/to/resource', success: function(result) {
         callback(result);
   }});
}


$('a.example').click(function() {
     var $this = $(this);

     invokeAjaxAsync(function(result) {
        $this.text(result.toString());
     }); // browser will remain responsive, but still update text when the AJAX call completes.
});
于 2012-10-23T05:53:42.503 に答える