首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JQuery可以监听来自其他javascript的AJAX调用吗?

JQuery可以监听来自其他javascript的AJAX调用吗?
EN

Stack Overflow用户
提问于 2010-12-10 15:27:02
回答 5查看 22.4K关注 0票数 26

我需要构建一个功能到购物车,使用AJAX从服务器检索模板的更新副本时,有一些变化(例如,一个产品被删除)。首先,我不能修改服务器端代码,也不能修改使购物车工作的JavaScript。(我知道这并不理想,但事实就是如此)

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-18 04:00:37

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

下面是一小段示例代码:

代码语言:javascript
复制
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。

这个解决方案可能不会在IE6或更早的版本上工作,但它可以在FF,IE7+,Chrome,Opera,Safari...

票数 41
EN

Stack Overflow用户

发布于 2013-01-02 20:14:01

我更喜欢这个解决方案。

代码语言:javascript
复制
$(document).ajaxComplete(function(event,request, settings){
    // Your code here
});
票数 11
EN

Stack Overflow用户

发布于 2015-09-25 13:50:45

我的朋友,你可以用Jquery很容易做到这一点(正如你所说的那样,你正在使用Jquery)

(对于那些没有使用的人,他们可以在ajax函数下驱动Jquery库代码来查看本机代码:') )

代码语言:javascript
复制
$(document).bind("ajaxSend", function(){
   $("#loading").show();
 }).bind("ajaxComplete", function(){
   $("#loading").hide();
 });

这是摘自jquery官方api文档的代码片段(请参阅全球事件部分)

https://api.jquery.com/Ajax_Events/

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4406606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档