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