当前位置: 首页 > 面试题库 >

XMLHttpRequest完成后如何运行函数?

上官鸿朗
2023-03-14
问题内容

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

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

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

谢谢,


问题答案:

如果没有jQuery,则可以挂钩该open方法以readystatechange在XHR对象被open编辑时为每个XHR对象的事件附加一个侦听器。确保在任何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



 类似资料:
  • 我正在和TestNG一起学习Java中的Selenium Webdriver。我正在使用谷歌登录页面进行测试。 我在按顺序运行测试用例时遇到了麻烦。我想做的是: 运行@BeforeTest 运行测试 1(登录成功) 运行@AfterTest(关闭浏览器和驱动程序) 等到 AfterTest 方法完成,然后运行测试 2(登录失败) 但我的经历是: 运行@BeforeTest 运行测试 1(登录成功)

  • 问题内容: 我有一个看似简单的问题,没有明显的解决方案 (通过阅读Angular JS文档) 。 我有一个Angular JS指令,该指令根据其他DOM元素的高度进行一些计算,以定义DOM中容器的高度。 指令内部发生了类似的事情: 问题是当指令运行时,找不到它,返回一个空数组而不是我需要的jQuery包装的DOM元素。 我是否可以在指令中使用仅在加载DOM之后运行的回调,并且可以通过常规jQuer

  • 问题内容: 总的来说,我对Swift和Xcode还是比较陌生,并且发现很多困难要设法解决。 我正在开发一个利用后端服务器的应用程序。为了不阻塞主线程,每当应用程序从服务器下载任何内容时,它都会异步地在其他线程上完成。但是,其余代码将继续在主线程上执行,并且当应该从服务器下载的数据尚未下载时,它将崩溃。我想知道如何在异步函数完成后调用函数来运行,这对于单独文件中的函数必须完成。 我读过闭包可能对此有

  • 大家好我有这样一个问题,我有2个异步功能。我只想在第一次完全结束后,运行第二次。这就是我试图做的: null null 但它并不总是起作用的,有时第二个函数的代码运行在第一个函数的代码之前,我不确定为什么,我用await强制第二个只在第一个结束之后。 我现在只想让第一个函数结束来激活第二个函数。

  • 问题内容: 在下面,该语句在调用完成 之前 被执行。我该如何更改? 问题答案: 您不能-至少不明智。虽然可以在jQuery ajax请求上设置一个属性,但过去在尝试将其与值一起使用时遇到了 严重的问题。 尝试重新考虑您要完成的工作: 然后: 或者,如果您的回调 仅 需要访问返回的数据,那么您可以更简单地执行 然后

  • 我试图在Beam管道完成后,在Google DataFlow上运行一个函数(或管道)。 目前,我已经构建了一个hack来运行该函数,方法是使用 ... func在哪里: 但是有更好的方法吗?