2016-05-17 61 views
0
<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 –

回答

1

打破成功的循環:

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

或者使用setTimeout代替setInterval,那麼就不會有一個循環

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>