ajax таймаут получения запроса не запускает обработчик ошибок - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь вызвать ajax функцию, которая читает и показывает данные из таблицы, но если процесс занимает слишком много времени, вызов ajax должен остановиться и показать сообщение об ошибке. Я пробовал использовать параметр timeout в функции ajax, но обработчик ошибок не запускается; но вместо этого он вызывает обработчик успешного события ..

JS:

var start_time = new Date().getTime();
var req_time, max_time;
max_time = 100;

$.ajax({
  type: 'get',
  url: 'mypage/myfunction',
  dataType: 'json',
  async: true,
  timeout: max_time,
  success: function(res) {
    req_time = new Date().getTime() - start_time; // 2106 miliseconds
    console.log('success!', res, req_time);
  },
  error: function(err, txtStatus) {
    console.log('error!', err, txtStatus); // doesn't get triggered even though req_time > max_time
  },
  complete: function() {
    req_time = new Date().getTime() - start_time; // 2107 miliseconds
    console.log('complete', req_time);
  }
});

1 Ответ

0 голосов
/ 14 июля 2020

Обратите внимание, что время ожидания исчисляется миллисекундами. Поэтому, если вы хотите запустить обработчик ошибок, присвойте max_value 2000 рядом!

jQuery <= 1.7.2 </strong>

var start_time = new Date().getTime();
var req_time, max_time;
max_time = 2000; // Please update the max_time 

$.ajax({
  type: 'get',
  url: 'mypage/myfunction',
  dataType: 'json',
  async: true,
  timeout: max_time,
  success: function(res) {
    req_time = new Date().getTime() - start_time; // 2106 miliseconds
    console.log('success!', res, req_time);
  },
  error: function(err, txtStatus) {
    console.log('error!', err, txtStatus); // doesn't get triggered even though req_time > max_time
    if(textStatus === 'timeout')
    {     
         alert('Failed from timeout');         
        //do something. Try again perhaps?
    }
  },
  complete: function() {
    req_time = new Date().getTime() - start_time; // 2107 miliseconds
    console.log('complete', req_time);
  }
});

jQuery 1,8 +

var start_time = new Date().getTime();
var req_time, max_time;
max_time = 2000; // Please update the max_time 
$.ajax({
  type: 'get',
  url: 'mypage/myfunction',
  dataType: 'json',
  async: true,
  timeout: max_time,
 }).done(function(){
     //do something
 }).fail(function(jqXHR, textStatus){
     if(textStatus === 'timeout')
     {     
        alert('Failed from timeout'); 
        //do something. Try again perhaps?
     }
 });​
...