Я пытаюсь использовать DataTables с успешным обратным вызовом. Поскольку я хочу дать пользователю предупреждение, если введенные значения, которые создают DataTable, имеют ошибку.Альтернативный вариант обратного вызова DataTables
К сожалению, DataTables требует успешного обратного вызова, поэтому я не могу его перегрузить.
В настоящее время код:
configurationBlockChart = $('#blockSearchTable').DataTable(
{
processing: true,
serverSide: true,
stateSave: true,
bDestroy: true,
ajax:
{
type: 'GET',
url:"ajax_retreiveServerSideBlockNames/",
data:
{
'csrfmiddlewaretoken':csrftoken,
'username':username
}
},
rowCallback: function(row, data)
{
if ($.inArray(data.DT_RowId, blockSelected)!== -1)
{
$(row).addClass('selected');
}
},
});
Данные, возвращаемые этой Ajax Получить являются строки данных.
Однако, есть вероятность того, что данные, возвращаемые имеет ответ недействителен, с строки не вернулся
Я пытался добавить успех, прежде чем rowCallBack:
success: function(response)
{
if(response.status == "invalid")
//then inform user
}
пытались также использовать fnDrawCallBack
fnDrawCallback: function(settings, response)
{
console.log("Hello World!");
if(response.status == "invalid")
{
$('#invalid').modal("show");
$('#usernameSearch').modal("show");
}
}
Однако fnDrawCallBack будет вызываться только в том случае, если возвращены строки.
Проблема в том, что иногда строки не возвращаются, а исключение предоставляется кодом javascript.
Я мог бы, однако, попытаться поймать, но я все равно хотел бы, чтобы мой сервер передавал json-статусы в код javascript.
EDIT: Используя xhr, он может поймать этот недействительный ответ, в то же время не мешая функции успеха для ajax.
$('#chartSearchUsername').click(function(event)
{
$('#chartConfigModal').modal("hide");
$('#usernameSearch').modal("show");
configurationUserChart = $('#userSearchTable').DataTable(
{
processing: true,
serverSide: true,
stateSave: true,
bDestroy: true,
ajax:
{
type: 'GET',
url:"ajax_retreiveServerSideUsernames/",
data:
{
'csrfmiddlewaretoken':csrftoken
},
},
rowCallback: function(row, data)
{
if ($.inArray(data.DT_RowId, userSelected)!== -1)
{
$(row).addClass('selected');
}
},
})
.on('xhr.dt', function(e, settings, response)
{
if(response.status == "invalid")
{
$('#invalid').modal("show");
$('#usernameSearch').modal("hide");
}
});
});
Вы пытались переместить функцию обратного вызова, которая будет выполнена на события XHR? [Ссылка здесь] (http://datatables.net/reference/api/ajax). Тогда вы можете проверить, что вернется первым – elzi
Спасибо за ваш ответ! Нет, я не пробовал, я посмотрю на ссылку как можно скорее. – user1157751
@elzi Спасибо! xhr работает отлично! – user1157751