所有Ajax响应的通用处理程序

时间:2012-11-25 14:58:52

标签: php jquery ajax

我在页面中有十几个ajax调用,所有调用都有不同的目的。我想知道我是否可以编写一个能够在页面上捕获任何ajax调用响应的函数。如果响应是文本“Catch me”,则该函数会阻止默认的ajax成功函数并提醒“Caught”;如果没有,它遵循默认的成功函数。

基本上,我是否可以编写一个捕获页面上所有ajax调用并检查其响应文本的函数。

一种繁琐的方式是编辑每个ajax调用,但我试图避免这种情况。

2 个答案:

答案 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");
});