1

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

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

一个乏味的方法是编辑每个 ajax 调用,但我试图避免这种情况。

4

2 回答 2

1

查看jQuery 中的全局 AJAX 事件处理程序。该页面说:

当页面上的任何 AJAX 请求发生某些事件(例如初始化或完成)时,这些方法注册要调用的处理程序。如果 jQuery.ajaxSetup() 中的全局属性为 true(默认情况下为 true),则在每个 AJAX 请求上触发全局事件。注意:无论 global 的值如何,都不会为跨域脚本或 JSONP 请求触发全局事件。

所以你的代码应该看起来像这样(我使用了随机选择器,没有必要使用“body”):

$("body").ajaxComplete(function(e, xhr, settings){ alert(xhr.responseText); });​​​​​​​
于 2012-11-25T15:11:39.747 回答
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");
});
于 2012-11-25T15:58:50.830 回答