您好我想在呼叫成功之前添加一个公共处理程序。
例如: 服务器总是发送{errorCode:1,errorMsg:“blah”}之类的数据 如果errorCode == 1那么在公共处理程序中我应该显示一个消息框,并取消成功函数。
编辑: PS:这是一个移交项目,我无法修改架构。
答案 0 :(得分:2)
您可以创建一个名为ajaxSuccess
的函数 - 可以全局访问,它会使用您的附加检查包装ajax成功回调。在此示例中,如果响应包含handleError
,则调用errorCode
,否则将调用成功回调:
function ajaxSuccess(callback) {
return function(response, textStatus, xhr) {
if(typeof response == 'object' && 'errorCode' in response) {
handleError(response, xhr);
} else {
callback.apply(this, arguments);
}
};
}
function handleError(error, xhr) {
alert('AJAX error ' + error.errorCode + ':\n' + error.errorMsg);
}
通过这种方式,您始终可以确保通过ajaxSuccess
代理您的成功回调:
$.post(url, data, ajaxSuccess(function(response) {
alert(response);
}));
我认为这可以让您更好地了解在阅读代码时尝试调试的内容,但是如果您确实想要创建全局处理程序并隐藏ajaxSuccess
调用,我想你可以为你设置一个默认的beforeSend
监听器:
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if('success' in settings && typeof settings.success == 'function') {
settings.success = ajaxSuccess(settings.success);
}
}
});
但请注意,这只是设置默认 beforeSend
。如果您进行AJAX调用并确定需要beforeSend
其他内容,请手动设置将覆盖默认选项。因此,对于这些场景,您需要记住在ajaxSuccess
中手动包装成功回调。
答案 1 :(得分:0)
我认为你正在谈论这样的事情:
$.ajax({
url:"http://some-post-url.com"
}).done(function(data)
{
var parsed = $.parseJSON(data);
if(parsed["errorCode"] == 1) {
//error code here
} else {
//success code here
}
})
您只需评估该数据服务器响应。