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

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

问题描述:

<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> 

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

+1

如果你只希望它来调用一次,为什么不使用[的setTimeout(http://www.w3schools.com/jsref/met_win_settimeout.asp)代替[的setInterval( http://www.w3schools.com/jsref/met_win_setinterval.asp)? – Joe

+0

谢谢你的帮助,我不知道setTimeout –

打破成功的循环:

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

或者使用setTimeout代替setInterval,那么就不会有一个循环

看到你的代码,我知道你正在尝试做一个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>