- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我设置了常用的 XMLHttpRequest,到目前为止一切正常,我可以检索数据和 readyState 更改并执行各种操作。
有一点不会发生,那就是 readyState 在达到 0 时会触发 onreadystatechange() 函数。
现在我想知道...为什么?
我查看了 XMLHttpRequest MDN entry但是没有提到为什么当 readyState 达到 0 时不应触发 onreadystatechange。我也没有找到关于该主题的其他信息...
片段:
// Inside a class, this = class instance
this.socket = new XMLHttpRequest();
// For easy access of this class instance in onreadystatechange
var client = this;
// Write current readyState to console
this.socket.onreadystatechange = function ()
{
// Adding this just to verify there are no errors in if block
console.log("readyState: "+client.socket.readyState);
if(client.socket.readyState === 0)
{
console.log("readyState is 0");
}
else
{
console.log("readyState is "+client.socket.readyState);
}
}
当 XMLHttpRequest 套接字处理完请求后,XMLHttpRequest 实例的值将是 readyState===0,至少 Firefox 的 JS 控制台告诉我这一点。
在执行请求后,JS 控制台正确列出了 readyStates 1-4 的日志消息,但没有请求之前和之后的 readyState 0 的消息。
理论上,当readyState从4变回0时,是不是应该触发onreadystatechange()函数?在使用当前 FF 和 Safari 的 macOS 以及使用 IE11 的 Win 上检查了这一点,到处都是相同的行为,onreadystatechange() 永远不会为 readyState 0 触发。
XMLHttpRequest 是故意不这样做的,还是我做错了什么?感谢任何有用的输入。 :)
(请不要使用“使用 jQuery”评论或类似的评论,谢谢。)
更新:
事实证明,在成功或失败的请求完成后,readyState 永远保持在 4,在 FF、IE、Safari 中验证。
但是,如果正在进行的请求被中止,则 readyState 将从 > 0 返回到 0。所以 readystatechange 确实发生了,但是 onreadystatechange 没有被触发,在 FF 和 Safari 中验证了这一点。
更新 3:
根据XMLHttpRequest spec ,当 XHR 处于 readyState 3(接收)并中止时,XHR 应使用 onreadystatechange 事件将 readyState 设置为 4(完成),发出网络错误,然后使用 no 将 readyState 设置为 0(未发送) onreadystatechange 事件。
但是当我中止处于 readyState 3(接收)的 XHR 时,它会首先将 readyState 设置为 4(完成),并带有 onreadystatechange 事件和 HTTP 状态 200(OK),然后它会触发 onabort 和 onloadend 并重置 readyState到 0(未发送)...但在任何时候都不会触发 onerror 事件。
非常困惑。
最佳答案
In theory, when the readyState changes from 4 back to 0, shouldn't the onreadystatechange() function be triggered?
XHR 实例不可重用。 如果Firefox 的 XHR 对象将状态从 4 返回到 0(这对我来说不是,见下文),那是 Firefox 特有的东西,但它没有用,而且它不会触发无用的事件也是如此。
状态从 DONE
(4) 到 UNSENT
(0) 是没有意义的。请求不是未发送。 完成。
在评论中回复你的笔记:
But after aborting, it returns back to 0 --- after it was already in readyState 3 and retrieving the file...
嗯,那会有所不同 — 从 3 到 0,而不是从 4 到 0。如果我在 Chrome 和 Firefox 中做同样的事情,我也会看到这一点。
当您说 (readyState
3) 时中止时,readyState
应该不会变回 0;相反,它应该更改为 4,设置对网络错误的响应,并触发 readystatechange
事件。
如果在 readyState
为 4 时中止,它应该变回 0 — 但规范没有说它应该触发 readystatechange
事件(而它确实说其他时候状态会被各种算法改变)。
因此,在这种边缘情况下,Chrome 和 Firefox 似乎都没有严格遵守规范。
关于javascript - XMLHttpRequest onreadystatechange 从未为 readyState 0 触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45634459/
我只需要以下代码的清晰解释来创建 XMLHttpRequest . var xhr = false; if (window.XMLHttpRequest) { xhr = new XMLHtt
我无法让 XMLHttpRequest 对象在我正在编写的仪表板小部件中正常工作。我将其隔离为一个在 main.js 文件的全局范围内不起作用的简单示例: xhr = new XMLHttpR
首先,如果我要说的没有任何意义,请允许我道歉。我已经离开了我的舒适区,我真的不知道我在做什么。照这样说... 我正在使用 Google Drive File Picker library允许用户从他们
我还有一个问题。 XMLhttpRequests 困扰着我。一切现在都在数据库中,但我需要这些数据来更新我的页面以加载或重新加载第一页。 XHR 在触发 PHP 脚本的 JavaScript 文件中触
我试图了解从 WebAssembly 调用 XmlHttpRequest 的最佳和最有效的方法是什么。 我找到了 http://webassembly.org/getting-started/js-a
我有兴趣只提取 XHR 的网址,而不是网页中的每个网址: 这就是我提取页面中每个 url 的代码: import scrapy import json from scrapy.selector imp
有没有办法检测 XmlHttpRequest 无法解析 URL?使用错误的 URL 调用 Open(...) 时似乎不会抛出异常。 最佳答案 HTTP 状态代码将为零。 这适用于无法建立连接且未使用代
有没有办法检测 XmlHttpRequest 无法解析 URL?使用错误的 URL 调用 Open(...) 时似乎不会抛出异常。 最佳答案 HTTP 状态代码将为零。 这适用于无法建立连接且未使用代
当我在 mozilla 浏览器中运行该应用程序时,出现以下错误 主线程上的同步 XMLHttpRequest 已被弃用,因为它会对最终用户的体验产生不利影响。更多帮助 http://xhr.spec.
我正在使用 javascript 通过 XMLHttpRequest 在 div 中加载数据,现在我想知道是否有可能在加载的 div 中创建另一个 XMLHttpRequest,这样一个新的 oncl
这个问题在这里已经有了答案: Are 'Arrow Functions' and 'Functions' equivalent / interchangeable? (4 个答案) 关闭 3 年前。
我感觉到很多关于使用新的 HTML5 JS XHR 技术的简单跨域 XmlHttpRequest 方法的讨论。给定下面的标准 JavaScript XHR 代码... var xhr=new XM
我是 PWA 的初学者,我尝试让我的代码调用 API,然后将其存储在浏览器的缓存中。但是我看到 axios 使用 XMLHttpRequest 而不是 fetch API,所以我无法缓存我的 API
这个问题在这里已经有了答案: Can we omit parentheses when creating an object using the "new" operator? (6 个答案) 关闭
这段代码块有什么区别: var xhr = new XMLHttpRequest(); xhr.upload.addEventListener("progress", uploadProgress,
我有一个 ajax 调用,我在其中使用 jQuery.ajax() 向 mvc 操作发出请求。这一切都很好。但是,由于某些表单具有文件控件,我将其从使用 jQuery.ajax() 更改为使用 XML
我对 Node.js 和 XMLHttpRequest 非常陌生,所以如果这是一个简单答案的问题,请耐心等待。 我目前正在尝试抓取一个 friend 的网页(当然要经过他的许可),其中包含视频和字幕。
我在 Microsoft Edge 中收到此错误。这是什么意思?在线搜索主要是为我提供有关人们在产品中遇到错误的线索。 最佳答案 如果 XMLHttpRequest 调用 ( www.mysite.s
我正在使用 jQuery 和 Office JS API 构建一个 Outlook 加载项。我在开发时有一个本地服务器正在运行,我正在尝试向我站点的主服务器上的端点提交一个 POST 请求。每次尝试提
当使用 FormData 对象将文件附加到请求时,我一直试图找到一种方法来在 XMLHttpRequest 对象上设置我自己的边界。我看过很多关于这个的帖子,每个人都说“不要设置边界,它会自动为你生成
我是一名优秀的程序员,十分优秀!