小编典典

JQuery可以侦听其他JavaScript的AJAX调用吗?

ajax

我需要在购物车中构建一个功能,该功能在发生某些更改(例如,产品被删除)时使用AJAX从服务器中检索模板的更新副本。我无法修改服务器端代码,也无法修改使购物车首先运行的JavaScript。(我知道这并不理想,但事实就是如此)

我想做的是每次购物车更新时都运行自己的JavaScript。 我想知道是否可以侦听AJAX调用 ,并在每次生成代码时运行我的代码。


阅读 207

收藏
2020-07-26

共1个答案

小编典典

要跟踪HTML文档上的所有AJAX调用,您可以覆盖XMLHttpRequest原型。这样,您可以监视XMLHttpRequest对象方法的操作。

这是一个小的示例代码:

var open = window.XMLHttpRequest.prototype.open,
    send = window.XMLHttpRequest.prototype.send,
    onReadyStateChange;

function openReplacement(method, url, async, user, password) {
    var syncMode = async !== false ? 'async' : 'sync';
    console.warn(
        'Preparing ' +
        syncMode +
        ' HTTP request : ' +
        method +
        ' ' +
        url
    );
    return open.apply(this, arguments);
}

function sendReplacement(data) {
    console.warn('Sending HTTP request data : ', data);

    if(this.onreadystatechange) {
        this._onreadystatechange = this.onreadystatechange;
    }
    this.onreadystatechange = onReadyStateChangeReplacement;

    return send.apply(this, arguments);
}

function onReadyStateChangeReplacement() {
    console.warn('HTTP request ready state changed : ' + this.readyState);
    if(this._onreadystatechange) {
        return this._onreadystatechange.apply(this, arguments);
    }
}

window.XMLHttpRequest.prototype.open = openReplacement;
window.XMLHttpRequest.prototype.send = sendReplacement;

使用此示例,对于每个AJAX调用,您都会在JavaScript控制台中收到警告。

它不是jQuery脚本,但是您可以根据需要在内部使用jQuery。

此解决方案可能无法在IE 6或更早版本上运行,但可以在FF,IE7 +,Chrome,Opera,Safari …

2020-07-26