如何在一次调用控制器后停止我的Ajax计时器

时间:2016-05-17 07:40:03

标签: ajax asp.net-mvc

<script type="text/javascript" src="~/Scripts/jquery.unobtrusive-ajax.js">

</script>
 <script type="text/javascript">
 var timer, delay = 3000;
 timer = setInterval(function () {
    $.ajax({
        type: 'POST',
        url: 'DeleteDatabase',
        success:
            function (response) {
                clearInterval(timer);
                console.log("Success");
            },
        error:
            function (response) {

                console.log("failure");
            },
        });

},delay)

</script>

这是我将控制权发送给控制器的代码。我希望它在一次通话后停止。我应该修改此代码,否则请建议您对此查询的简单回答,谢谢!

2 个答案:

答案 0 :(得分:1)

打破成功循环:

        function (response) {
            //clearInterval(timer);
            console.log("Success");
            break;
        },

或使用setTimeout代替setInterval,然后就不会成为循环

答案 1 :(得分:1)

看到你的代码我明白你在延迟后试图做一个ajax调用,并且一旦你从服务器得到回复就​​停止timer,否则如果服务器有任何错误你就有了再试一次..

所以这是我的解决方案。

维护一个全局变量flag来说明是否已经发出ajax请求,如果是,则不要连续请求,然后在ajax error块中删除该标志并允许下一个请求ajax。所以这就是我的意思

<script type="text/javascript">
 var timer, delay = 3000;
 var ajaxStatus = 0;             // 0 = dead, 1 = in process
 timer = setInterval(function () {
  if(ajaxStatus == 0){           // make ajax call only when its dead
    $.ajax({
        type: 'POST',
        url: 'DeleteDatabase',
        success:
            function (response) {
                clearInterval(timer); //clear the timer when the task is complete
                console.log("Success");
            },
        error:
            function (response) {
                ajaxStatus = 0    // set back status to dead so that we make another ajax request after the delay.
                console.log("failure");
            },
        });

   ajaxStatus = 1;
  }
},delay)

</script>
相关问题