如何拦截所有Ajax的调用请求?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (173)

我试图拦截所有Ajax调用,以检查Ajax响应是否包含我从PHP脚本中作为JSON发送的特定错误代码

(codes: ACCESS_DENIED, SYSTEM_ERROR, NOT_FOUND).

我试着:

$('.log').ajaxSuccess(function(e, xhr, settings) {
});

我能否通过将“ajaxSuccess”事件绑定到文档来实现我想要的?

$(document).ajaxSuccess(function(e, xhr, settings) {
});
提问于
用户回答回答于

http://api.jquery.com/ajaxSuccess/

每当Ajax请求成功完成时,jQuery就会触发ajaxSuccess事件。此时将执行在.ajaxSuccess()方法中注册的任何和所有处理程序。

因此,选择器没有定义要“捕获”事件的位置(老实说,Ajax事件本质上不是从DOM元素开始的),而是定义了将默认处理的作用域(即this将指向那个/那些元素。

用户回答回答于

如果使用jQuery,$.ajaxSuccess这是一个不错的选择,它将拦截所有框架中的XHR调用(我已经用ExtJS和jQuery测试过它--即使同时加载了多个框架,它也应该工作)。它已经测试了与IE8,Chrome和Firefox一起工作。

(function(XHR) {
    "use strict";

    var open = XHR.prototype.open;
    var send = XHR.prototype.send;

    XHR.prototype.open = function(method, url, async, user, pass) {
        this._url = url;
        open.call(this, method, url, async, user, pass);
    };

    XHR.prototype.send = function(data) {
        var self = this;
        var oldOnReadyStateChange;
        var url = this._url;

        function onReadyStateChange() {
            if(self.readyState == 4 /* complete */) {
                /* This is where you can put code that you want to execute post-complete*/
                /* URL is kept in this._url */
            }

            if(oldOnReadyStateChange) {
                oldOnReadyStateChange();
            }
        }

        /* Set xhr.noIntercept to true to disable the interceptor for a particular call */
        if(!this.noIntercept) {            
            if(this.addEventListener) {
                this.addEventListener("readystatechange", onReadyStateChange, false);
            } else {
                oldOnReadyStateChange = this.onreadystatechange; 
                this.onreadystatechange = onReadyStateChange;
            }
        }

        send.call(this, data);
    }
})(XMLHttpRequest);

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问9 回答
  • 优惠活动秘书

    0 粉丝2 提问8 回答
  • 最爱开车啦

    8 粉丝503 提问6 回答
  • _逗你玩_

    腾讯 · 客户端安全 (已认证)

    4 粉丝4 提问5 回答

扫码关注云+社区

领取腾讯云代金券