2012-01-22 156 views
4

我向服務器發出一個ajax請求。有時我收到502錯誤。所以,如果發生錯誤()方法被調用。重複jQuery ajax請求

如果收到錯誤,我該如何重複請求?代碼應該看起來像這樣:

$.ajax({ 
       url: 'http://server/test.php', 
       type: 'GET', 
       dataType: 'jsonp', 
       cache: 'false', 
       timeout: 32000, 
       success: function(data) { 
        //some actions here 
       }, 
       error: function(jqXHR, textStatus, errorThrown) { 
        console.log("Error[refresh]: " + textStatus); 
        console.log(jqXHR); 
        // here I want to repeat the request like "this.repeat()" 
       }, 
      }); 

回答

6

,你可以像這樣做,

function ajaxCall(){ 
     $.ajax({ 
       url: 'http://server/test.php', 
       type: 'GET', 
       dataType: 'jsonp', 
       cache: 'false', 
       timeout: 32000, 
       success: function(data) { 
        //some actions here 
       }, 
       error: function(jqXHR, textStatus, errorThrown) { 
        console.log("Error[refresh]: " + textStatus); 
        console.log(jqXHR); 
        ajaxCall(); // recursion call to method. 
       }, 
      }); 
} 
5

把你的代碼放入函數並再次調用這個函數。像:

function ajaxFunction() 
{ 
.... 
error:function(){ajaxFunction();} 
} 
+0

從我遞歸的知識,你會停止從功能重複自己 - 例如基本情況是什麼?可能不是一個真正的評論,但我想我會問... – Rob

+2

@Rob - 如果你想避免永遠打電話,你可以計數幾次呼叫的時間和停止它。 – Hadas

+0

這是有道理的 - 所以有一個初始值爲0的變量,在每次調用後將它加1,然後將調用放在while循環中(這會一直運行,直到增加的值達到特定值)。在這裏, – Rob

3

隨着呼叫限制,如建議通過哈達斯:

function ajaxCall(count) { 
    count = typeof count == 'undefined' ? 0 : count; 
    limit = 5; 
    if(count === limit) return; 
    // no need to specify cache and type: 
    // type has 'GET' as default value 
    // cache has default value of false if the dataType is jsonp 
    $.ajax({   
     url: 'http://server/test.php', 
     dataType: 'jsonp', 
     timeout: 32000, 
     async: false 
    }).done(function(data) { 
     // some actions here 
    }).fail(function(jqXHR, textStatus, errorThrown) { 
     count += 1; 
     console.log("Error[refresh]: " + textStatus); 
     console.log(jqXHR); 
     // 500, 1000, 1500, 2000 etc 
     setTimeout(function() { 
      ajaxCall(count); 
     }, 500*count); 
    }); 
}; 
+0

將算作一個全局變量。如果是這樣,我們是否改變第二條線? – signonsridhar