2016-08-14 22 views
3

MVC5アプリケーションで2秒遅れでajax:10回のコントローラーでアクションを呼び出そうとしています。ここで 指定された遅延でajax呼び出しが行われないのはなぜですか?

は、私が書いたコードです:

$(document).ready(function() { 

    (function loop(i) { 
     setTimeout(function() { 
      var d = new Date(); 
      console.log(d.getTime()); 
      callAjax(); 
       console.log("works " + i); 
       if (--i) loop(i); 
      }, 
      2000); // ms 
    })(10); 

    function callAjax() { 
     $.ajax({ 
      url: '/Home/StartElection', 
      type: 'POST', 
      data: "test", 
      async: true 
     }) 
      .done(function (partialViewResult) { 
       $("#partialTable").html(partialViewResult); 
      }); 
    }; 
}); 

コンソールログ(2秒遅れで)予想されるが、コントローラへの呼び出しが瞬時に起こるようである - 私は休憩を設定するときVisual Studioのコントローラのアクションでは、次の呼び出しに2msかかります。

これはなぜ起こっているのですか?

編集:私はちょうどAJAX呼び出しの前&各

+2

どうすれば確認できますか? –

+0

私は、呼び出されているアクションにブレークポイントを持っていて、ブレークポイントに再びヒットするとすぐに – NRKirby

+0

私はあなたの観測がajaxコールの非同期性のために間違っていると思います。ブロッキングステートメントをブレークポイントとして使用する代わりに、ネットワークタブで要求の送信を確認してください。編集:あなたは、ブレークポイントのサーバー側またはクライアント側を意味ですか? –

答えて

0

間2000ミリ秒はあなただけでは非同期にこの行を変更する必要があります)Date.getTime(のコンソールログを追加しました:真 - >非同期:偽このプロパティがtrueに設定されていると、AJAX呼び出しは非同期になります。 あなたのajaxコールには時間がありません。 これが役立つことを願っています。

0

クライアント側のコードに関する限り、コールに関する限り、うまく機能しているようです。それはここにajaxを扱うときに考慮すべき点がいくつかあります:

1)リモートサービスを呼び出せる回数は制御できますが、そのサービスに要する時間は制御できません返事する。

2)そういうわけで、たいていの場合、ループでajax呼び出しを行わないことが一般的には良い方法です(これはajaxの一般的な目的をいくらか打ち負かします)。むしろ、それぞれの呼び出しに対する応答を使用して、次の呼び出しを行います(ただし、正確なソリューションを提案するために構築しようとしているものを正確に把握する必要があります)。だから、

あなたは、私がこのような何かを、よりになると思いますAJAX使用して探しているものに最も近いもの:

$(document).ready(function() { 

    /*(function loop(i) { 
     setTimeout(function() { 
      var d = new Date(); 
      console.log(d.getTime()); 
      callAjax(); 
       console.log("works " + i); 
       if (--i) loop(i); 
      }, 
      2000); // ms 
    })(10);*/ 

    var i=0; 
    function callAjax() { 
     var requestTimeMessage = "fetch #"+i+" at: "+new Date().getTime(); 
     console.log(requestMessage); 

     $.ajax({ 
      url: '/Home/StartElection', 
      type: 'POST', 
      data: "test", 
      async: true 
     }) 
      .done(function (partialViewResult) { 
       var requestTimeMessage = "response #"+i+" at: "+new Date().getTime(); 
       console.log(requestMessage); 

       $("#partialTable").html(partialViewResult); 
       i++; 
       if(i<10) { 
        /*Note this assumes a quick response for each call. 
        * Otherwise the response together with this delay will total a wait longer than 2 seconds. 
        */ 
        setTimeout(function() { 
         callAjax(); 
        2000); 
       } 
      }); 
    }; 
}); 

しかし、私が言ったように。私はあなたの質問にもっと適切な答えを与えるために達成しようとしていることを正確に知る必要があります。

関連する問題