如何在一次调用控制器后停止我的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计时器
答
打破成功的循环:
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>
如果你只希望它来调用一次,为什么不使用[的setTimeout(http://www.w3schools.com/jsref/met_win_settimeout.asp)代替[的setInterval( http://www.w3schools.com/jsref/met_win_setinterval.asp)? – Joe
谢谢你的帮助,我不知道setTimeout –