JQuery可以从其他javascript中监听AJAX调用吗?

Bud*_*nWA 21 javascript ajax jquery

我需要在购物车中构建一个功能,当某些内容发生变化时(例如,产品被删除),该购物车使用AJAX从服务器检索模板的更新副本.我不能修改服务器端代码,或者首先使购物车工作的JavaScript.(我不知道,但事情就是这样)

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

Nic*_*las 35

要跟踪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;
Run Code Online (Sandbox Code Playgroud)

通过此示例,对于每个AJAX调用,您将在JavaScript控制台中收到警告.

它不是jQuery脚本,但您可以根据需要使用jQuery.

这个解决方案可能不适用于IE 6或更早版本,但它适用于FF,IE7 +,Chrome,Opera,Safari ......


Yur*_*kiy 6

我更喜欢这个解决方案.

$(document).ajaxComplete(function(event,request, settings){
    // Your code here
});
Run Code Online (Sandbox Code Playgroud)

  • 这只会监听通过jQuery发出的AJAX请求。 (3认同)