2016-05-20 5 views
0

Я использую Datatables 1.10.5, и у меня есть обработчик ошибок ajax. Мне нужно получить доступ к фактическому коду статуса http, когда возникает ошибка, поэтому я могу узнать, истекло ли время сеанса моего пользователя (HTTP 401), и если на сервере есть что-то неправильное, например, ошибка HTTP 500. В настоящее время techNote всегда 7.Datatables 1.10.5 обработчик ошибок ajax - Получение доступа к коду состояния http

Как я могу получить этот неуловимый код состояния HTTP из транзакции ajax? Я попробовал ниже, но он не срабатывает.

$("#example").ajaxError(function(event, jqxhr, request, settings){ 
    alert("Failure HTTP Code:"+jqxhr.status);  
}); 

и

$.fn.dataTable.ext.errMode = 'throw'; 
$('#example').on('error.dt', function(e, settings, techNote, message) { 
    console.log('An error has been reported by DataTables: ', message); 
}); 

Нет информации мне нужно, или по крайней мере, я не могу найти его в любом из переданных переменных.

ответ

2

Ручка xhr Событие. Когда возникает ошибка Ajax, третий аргумент json будет null, а четвертый аргумент xhr будет содержать jQuery XHR объект. Вы можете получить статус, обратившись к объекту xhr.status.

Также см. $.fn.dataTable.ext.errMode, который может использоваться для указания DataTables не показывать предупреждение.

+0

К сожалению, $ ("# пример") ajaxError (функция (событие, jqxhr, запрос, настройка) { \t \t если (jqxhr.status == 500) предупреждение ("Произошла сторона сервера Ошибка"); \t \t}). Не работает в 1.10.5. Кажется, я могу заставить нового обработчика работать. – user3670534

+0

ОК. Я использовал событие xhr, и он работал отлично. Спасибо большое! – user3670534

0

Я был в состоянии получить доступ к коду состояния без переопределения глобальной JQuery ajaxError путем переопределения более специфичны для DataTables $.fn.dataTable.ext.errMode с функцией:

$.fn.dataTable.ext.errMode = function (settings, tn, msg) { 
     if (settings && settings.jqXHR && settings.jqXHR.status == 401) { 
      window.location = window.location.origin + '/login'; 
      return 
     } 
     alert(msg) // Alert for all other error types; default DataTables behavior 
    }; 

Этот пример показывает, редирект для входа в систему на 401 статус код, однако, вы можете сделать то же самое с любым другим кодом состояния.

Последнее замечание Вы можете использовать самые DataTables statusCode вариант для кода статуса конкретной обработки, но вам все равно нужно переопределить $.fn.dataTable.ext.errMode если вы хотите, чтобы обойти обработку ошибок по умолчанию, так как он выполняется перед тем, что вы определить в statusCode

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

  • Нет связанных вопросов^_^