В моем приложении много вызовов AJAX, каждый из которых возвращает ответ JSON. Вместо проверки данных в каждом вызове .done() я пытаюсь выполнить сжатие кода.JQuery AJAX - Фильтр перед .done()
Что мы имеем до сих пор
$.ajax({
url: 'test',
type: 'GET',
data: {
_token: token
},
dataFilter: function(jsonResponse) {
return isValidJson(jsonResponse);
}
}).done(function(jsonResponse) {
// do things
});
isValidJson(jsonResponse) {
try {
var parsedJson = $.parseJSON(jsonResponse);
if (parsedJson.error == 1) {
notificationController.handleNotification(parsedJson.message, 'error');
return false;
}
} catch (err) {
notificationController.handleNotification('A server-side error occured. Try refreshing if the problem persists.', 'error');
return false;
}
return jsonResponse; // Have to return the original data not true
}
Ожидаемое поведение является то, что если dataFilter возвращает ложь, это вызовет .fail(), если она возвращает истину, то он будет продолжать .done(). Вместо этого он просто продолжает .done() с результатом isValidJson().
Есть ли способ сделать .fail() сделать что-то стандартное, как отправить уведомление пользователю без необходимости ставить его под любой вызов AJAX?
Нет «функции _А, которые будут использоваться для обработки данных необработанных отклика XMLHttpRequest Это предварительная фильтрация функции для дезинфекции ответа. ** Вы должны вернуть обработанные данные ** ._ ". Поэтому вы не должны возвращать TRUE FALSE, если проверка json в порядке или нет. ваш страттерг ошибается –
@RoyiNamir Спасибо за это. Вы знаете правильный способ фильтрации данных вне .done() для всех вызовов AJAX? Должен ли я что-то продлить? –
Вы пробовали это var jxhr = $ .ajax (dataFilter: function() {jxhr.abort()}); ? – Kison