デフォルトでは、$.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.
});