Подтвердить что ты не робот

Установить обработчик ошибок для jQuery datatables ajax call

Я пытаюсь создать собственный обработчик ошибок, если что-то пойдет не так (например, сервер не отвечает) на вызов ajax для загрузки новых данных в мой datatable.

$table.DataTable().ajax.url(ajaxURL).load();

По умолчанию он показывает предупреждение, и я могу изменить это, чтобы выбросить ошибку javascript со следующей настройкой:

$.fn.dataTable.ext.errMode = 'throw';

Но при этом у меня просто ошибка, зарегистрированная в консоли, и я не уверен, как поймать эту заброшенную ошибку, поэтому я все еще не могу предоставить свой собственный обработчик ошибок.

В документации также есть событие с ошибкой, но похоже, что оно не срабатывает, поэтому следующие предупреждения не отображаются.

$table.on( 'error', function () { alert( 'error' );} );

Все остальное, что я нашел до сих пор, - это устаревший код, например, установка fnServerData, от которой я бы хотел не попасть.

Есть ли способ установить обратный вызов ошибки ajax в API 1.10?

4b9b3361

Ответ 1

Новая обработка событий ошибок была добавлена в Datatables v1.10.5 (выпущена 10 февраля 2015 г.).

$.fn.dataTable.ext.errMode = function ( settings, helpPage, message ) { 
    console.log(message);
};

Смотрите документы здесь:
https://datatables.net/reference/event/error
https://cdn.datatables.net/1.10.5/

Ответ 2

Используйте событие как пользовательский обработчик ошибок:

$(document).ready(function () {
    $('#myTable').on('error.dt', function (e, settings, techNote, message) {
        console.log('An error has been reported by DataTables: ', message);
    }).DataTable({
        "displayLength": 15,
        "ajax": {
          ....

Ответ 3

В качестве альтернативы используйте функцию ошибки в ajax для регистрации ошибок

$('#table').DataTable({
        ajax: {
           dataType: "JSON",  
            type: "POST",
            url: url,
            data: [],
            async: true,
            error: function (xhr, error, code)
            {
                console.log(xhr);
                console.log(code);
            }
        },...