我在页面中有十几个ajax调用,所有调用都有不同的目的。我想知道我是否可以编写一个能够在页面上捕获任何ajax调用响应的函数。如果响应是文本“Catch me”,则该函数会阻止默认的ajax成功函数并提醒“Caught”;如果没有,它遵循默认的成功函数。
基本上,我是否可以编写一个捕获页面上所有ajax调用并检查其响应文本的函数。
一种繁琐的方式是编辑每个ajax调用,但我试图避免这种情况。
答案 0 :(得分:1)
查看jQuery中的Global AJAX Event Handlers。页面上写着:
这些方法注册在某些事件时调用的处理程序,例如 作为初始化或完成,发生在任何AJAX请求上 页面。如果是,那么全局事件将在每个AJAX请求上触发 jQuery.ajaxSetup()中的全局属性为true,默认情况下为。 注意:从不为跨域脚本或JSONP触发全局事件 请求,无论全局值如何。
所以你的代码应该看起来像这样(我使用随机选择器,没有必要使用“body”):
$("body").ajaxComplete(function(e, xhr, settings){ alert(xhr.responseText); });
答案 1 :(得分:1)
我发现您正在尝试创建在响应上执行的全局处理程序,只需 成功事件之前。接下来,基于某些条件,中断默认行为(通过在您的情况下显示警报),或者进一步传递流(到自定义成功事件,因为每个ajax调用可以具有不同的逻辑以在成功时运行)。
为此,您应该稍微修改jQuery提供的ajax处理程序:
var ns = {};
(function(ctx) {
ctx.ajax = function(options, callback){
var defaults = {
success: function (data) {
if (data != "Catch me") {
callback(data);
} else {
alert("Catched");
}
}
};
$.extend(options, defaults);
$.ajax(options);
};
})(ns);
应该调用ajax调用,如下所示:
ns.ajax(options, function (data) {
alert("success, inside callback");
});