2011-06-26 11 views
0

Iは、次のコードを有する:Javascriptから同期してAjax関数を実行するにはどうすればよいですか?

$('#DoButton').click(function (event) { 
    event.preventDefault(); 
    $("input:checked").each(function() { 
    var id = $(this).attr("id"); 
    $("#rdy_msg").text("Starting" + id); 
    doAction(id); 
    }); 
}); 

function doAction(id) { 
      var parms = { Id: id }; 
      $.ajax({ 
       type: "POST", 
       traditional: true, 
       url: '/adminTask/doAction', 
       async: false, 
       data: parms, 
       dataType: "json", 
       success: function (data) { 
        $("#rdy_msg").text("Completed: " + id); 
       }, 
       error: function() { 
        var cdefg = data; 
       } 
      }); 
     } 

ボタンがクリックされたときにフォームをチェックし、それぞれについて、それがその後のAjax関数を呼び出しのdoAction()を呼び出して入力を確認しました。私はそれをすべて1つの通話の完了と次の通話の実行の間に2秒の遅延で同期させたいと思います。遅延は、最後のアクションが完了したことをユーザーに表示する時間を与えることです。

async = falseを設定すると、本当にajax関数が待機しますか?

Ajaxを実行してからdoActionを呼び出す前に、2秒の待機時間を追加するにはどうすればよいですか?

+1

を使用してそれを行うようにしてくださいあなたは明確でした、ユーザーがアクションが完了したことを知ることができるように待ちたいです。コードを同期させると、Webページには、実行後になるまで何も動作しません(何かをしている間にプログラムがどのようにフリーズするかについて考える)。多分メッセージを表示したり、代わりにボタンをグレー表示することをお勧めします。微妙な手掛かりが最良の手掛かりです。 – Ben

+1

の可能な複製[非同期ではなく非同期のAJAX要求を実行するにはどうすればjQueryを実行できますか?](http://stackoverflow.com/questions/133310/how-can-i-get-jquery-to-perform- a-synchronous-as-asynchronous-ajax-req) – Starx

答えて

0

は再帰

$('#DoButton').click(function (event) { 
    event.preventDefault(); 
    doAction($("input:checked").toArray().reverse()); 
}); 

function doAction(arr) { 
    if(arr.length == 0) return; 

    var id = arr.pop().id; 
    $("#rdy_msg").text("Starting" + id); 
    $.ajax({ 
     type: "POST", 
     traditional: true, 
     url: '/adminTask/doAction', 
     async: false, 
     data: { Id: id }, 
     dataType: "json", 
     success: function (data) { 
      $("#rdy_msg").text("Completed: " + id); 
      setTimeout(function(){ doAction(arr); }, 2000); 
     }, 
     error: function() { 
      var cdefg = data; 
      $("#rdy_msg").text("Error: " + id); 
      setTimeout(function(){ doAction(arr); }, 2000); 
     } 
    }); 
} 
0

AJAXコールのdoActionにsetTimeoutを使用します。

1

あなたもthis質問の解決策を試してみてください.delay()

を使用することができます待つように機能させるために、同期

$.ajaxSetup({ 
    async: false 
}); 

AJAX機能を設定するためのjQueryのではオプションがあります。

関連する問題