【发布时间】:2016-08-17 21:09:20
【问题描述】:
我的应用程序有很多 AJAX 调用,每个调用都返回一个 JSON 响应。我没有验证每个 .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返回false,它会触发.fail(),如果它返回true,它会继续.done()。相反,它只是继续 .done() 并返回 isValidJson() 的结果。
还有没有办法让 .fail() 做一些标准的事情,比如向用户发送通知,而不必将其放在每个 AJAX 调用下?
【问题讨论】:
-
没有。 “一个用于处理 XMLHttpRequest 的原始响应数据的函数。这是一个用于净化响应的预过滤函数。您应该返回净化后的数据。”。因此,如果 json 检查是否正常,则不应返回 TRUE 或 FALSE。你的策略是错误的
-
@RoyiNamir 谢谢你。您是否知道为所有 AJAX 调用过滤 .done() 之外的数据的正确方法?我应该扩展一些东西吗?
-
你试过这个 var jxhr = $.ajax(dataFilter : function() {jxhr.abort()}); ?
标签: javascript jquery ajax