2011-06-09 63 views
9

我已經看到,如果ajax請求失敗,您可以指定通常要執行的操作,是否可以在某種循環中再次嘗試,以便嘗試至少x的它停止前的時間?我曾經使用過這個代碼:在失敗時自動嘗試AJAX請求

$.ajaxSetup({ 
    "error":function() { 
    alert("error"); 
}}); 

這將適用於所有的AJAX請求(糾正我,如果我錯了)。

我想要做這樣的事情:

$.ajaxSetup({ 
    "error":function() { 
    $(this).ajax; 
}}); 
請問

這項工作?或者更好:這是否是正確的方法?我會在計數系統中重試重試,以便它不會無限次重試。在我的應用程序中,9次出現了10次,它會正常工作,但是現在和接下來我接口的其中一個API將返回一個錯誤。

任何建議將有助於,謝謝!

+0

可能重複[如何重新發送失敗的ajax請求?](http://stackoverflow.com/questions/8881614/how-do-i-resend-a-failed-ajax-request) – user2284570 2014-10-10 14:02:27

回答

13

你可以嘗試這樣的事情:

var attempts; 
    function doAjaxRequest() { 
     attempts = 0; 
     doAjaxRequestLoop(); 
    } 

    function doAjaxRequestLoop() { 
     attempts += 1; 
     if (attempts > 10) { 
      alert('too many attempts.'); 
      return; 
     } 

     $.ajax({ // do your request 
      error: function (error) { 
       doAjaxRequestLoop(); 
      } 
     }); 
    } 

</script> 

雖然我會建議反對。如果請求失敗,你可能想知道失敗的原因。如果用戶失去了互聯網連接?任何進一步的嘗試可能會再次失敗,爲什麼重試?

+2

您需要在'doAjaxRequest'內調用'doAjaxRequestLoop'。現在它只是將值設置爲0,從不做任何事情。 – 2011-06-09 20:15:51

+0

你的權利!這就是我急於得到的結果。發佈更新。 – Jay 2011-06-09 20:17:56

+0

謝謝!因此,出於某種原因,我正在使用的客戶端API中的一個似乎非常脆弱,大多數情況下它都能正常工作,但每隔一段時間,請求都會超時。如果我至少可以再試一次,我認爲這會讓它足夠穩固。我認爲這是一個很好的辦法,謝謝Jay – 2011-06-09 20:17:59