11

我正在开发一个项目,该项目有几个我无法更改的脚本。这些脚本通过 AJAX 更新页面。更新完成后,我需要运行一些代码。

当任何 XMLHttpRequest 完成时是否会触发任何事件?(或任何 XMLHttpRequest 状态更改?)。

不幸的是,我无法访问用于发出请求的特定 XMLHttpRequest 对象。

谢谢,

4

1 回答 1

18

如果没有 jQuery,您可以挂钩该open方法,以便在编辑readystatechangeXHR 对象时为每个 XHR 对象的事件附加一个侦听器open。确保在发生任何 Ajax 之前运行以下代码:

// save the real open
var oldOpen = XMLHttpRequest.prototype.open;

function onStateChange(event) {
    // fires on every readystatechange ever
    // use `this` to determine which XHR object fired the change event
}

XMLHttpRequest.prototype.open = function() {
    // when an XHR object is opened, add a listener for its readystatechange events
    this.addEventListener("readystatechange", onStateChange)

    // run the real `open`
    oldOpen.apply(this, arguments);
}

或者,如果您只关心成功load的事件,则可以侦听该事件而不是readystatechange.

于 2013-08-15T18:51:36.413 回答