2012-01-22 5 views
4

Я делаю запрос ajax на сервер. И иногда я получаю ошибку 502. Итак, если это вызвано методом error().Повторить запрос 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

С вызовом предела, как это было предложено Hadas:

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

Смежные вопросы