我有一个网站,我依赖很多自定义API调用。我的API总是返回XML。
目前,在我打电话的每个$ .get或$ .post的开头,我有这个片段:
var root = $($.parseXML(data)).find("Response");
if (root.children("Type").text() == "Error") {
toastr.error(root.children("Content").text(), "Error " + root.children("ReturnCode").text());
return;
}
但是,我觉得这个代码在我的某个页面上多余了,它被使用了15次。
我尝试使用$(document).ajaxSuccess()但是event.stopPropagation似乎不能在这里工作
有没有办法“拦截”每个ajax呼叫响应,做一些事情并可能阻止调用其他已定义的成功函数?
答案 0 :(得分:2)
我假设您的代码中的许多地方都有类似的内容
$.ajax({
method: "GET",
url: "someurl.html",
dataType: "xml",
success : function() {
var root = $($.parseXML(data)).find("Response");
if (root.children("Type").text() == "Error") {
toastr.error(root.children("Content").text(), "Error " + root.children("ReturnCode").text());
return;
}
// ...
},
error : function(qXHR, textStatus, errorThrown){
toastr.error(errorThrown, "Error " + qXHR.status);
}
});
您可以创建一个可以重复使用的通用自定义ajax函数
function baseAjaxCall(option, sCb) {
var ajaxOptions = {
method: option.method || "GET",
url: option.url,
dataType: option.dataType || "xml",
success : function(data) {
var root = $($.parseXML(data)).find("Response");
if (root.children("Type").text() == "Error") {
toastr.error(root.children("Content").text(), "Error " + root.children("ReturnCode").text());
return;
}
else {
sCb(root);
}
},
error : function(qXHR, textStatus, errorThrown){
toastr.error(errorThrown, "Error " + qXHR.status);
}
};
//you can check for optional settings
if(option.contentType !== undefined){
ajaxOptions.contentType = option.contentType;
}
$.ajax(ajaxOptions);
}
您的代码中的任何地方都可以重复使用baseAjaxCall函数
baseAjaxCall({ url: "someurl.html" }, function(root){
// no need to chek for errors here!
});
希望它有所帮助!