- 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/
我的请求有以下代码: var req = new XMLHttpRequest(); req.onreadystatechange = function() { if (req.
请记住,我对 JavaScript 语法非常很陌生,所以请耐心等待。 我试图使用多个onreadystatechange作为 promise 来捕获我从express返回的内容,但每次我这样做时,它们
我有一个问题。我在我用来触发的外部 javascript (ajax) 中有一个删除函数,以便执行我的 PHP 文件中的删除查询。 我想知道的是 onreadystatechange 函数中应该有什么
我希望 AJAX 回调触发 myFucntion 中的 alert() 并显示“它有效”,如何在 ajaxResponse 中引用 myobject 对象? function myobject() {
好的...所以我的代码非常简单。唯一的问题是调用 onreadystatechange 的函数永远不会被执行。我发出警报以显示 readyState 和 xmlhttp 的状态,分别显示为 1 和 0
这里是 Angular 新手。我想知道是否可以使用 $http 服务在任何就绪的状态/状态 更改时调用函数,而不仅仅是在成功/失败。在代码方面,它将是与以下 JS 代码等效的 Angular 代码:
一个多小时以来,我一直在尝试调试我的代码,但没有成功。我意识到ajax的异步调用意味着我必须将回调函数与onreadystatechange事件结合使用。问题是,我在控制台中不断收到“Uncaught
由于某些原因,onreadystatechange 回调函数没有在异步模式下被调用。我在同步模式下测试了帖子并确认帖子本身工作正常(注释掉了我用来在同步模式下检查帖子的测试代码)。该问题同时出现在 s
我有一个包含 的 HTML 页面. 正在根据某些事件进行刷新(我可以看到 的内容正在更改,所以到目前为止一切正常)。 我想做的是添加一个 onreadystatechange到 这样我就可以在获取
我正在尝试执行一些 AJAX,并且需要知道为什么这段代码没有触发完成或错误警报。我在 Mozilla Firefox 20.0.1 请注意 这段代码是更新数据库(我有一个选择语句读取确切的记录来验证它
我在将函数的值返回到变量时遇到一些问题。它显然是“未定义的”。这显然是由于 JavaScript 的异步性造成的。但就我而言,我不知道如何通过“回调”或“ promise ”来规避它。请参阅下面的代码
我正在尝试克服 ajax 请求,但 Chrome 控制台向我显示以下消息:xml_http.onreadystatechange 不是一个函数 这是我的 JS 代码: function ajax_re
背景 我每 5 秒使用 XMLHttpRequest 发出一个请求我想在收到回复时打印我的名字。 为此,我使用 onreadystatechange这允许我在收到答案时定义回调函数。 问题 为了实现这
我有一个名为 urlExists 的函数,我在几个项目中使用它都没有问题。现在我在患者面板中,需要在调用函数 addEventListener 之前检查 js 文件是否存在: function url
xmlhttp.onreadystatechange=function() { 因此这表示 onreadystatechange,调用 function()。我可以将参数放在 function() 中
什么是 JavaScript 类型不匹配错误? 可能的原因是什么? 我无法包含所有代码,但这是出现错误的行。 xmlObject.onreadystatechange = null; 最佳答案 您收到
这个问题在这里已经有了答案: How do I return the response from an asynchronous call? (41 个回答) 关闭 7 年前。 我正在尝试从 onr
为什么这段代码不起作用(调用 handleRequestStateChange 函数时)?: function ajaxRequest(){ var xmlObj = new XMLHttpRequ
我正在尝试让 AJAX 请求生效;具体来说,我不想在控制台中记录每个更改以了解我做对了。代码如下: function loadAJAX() { ajaxRequest = new XMLHttpReq
我有一个执行基本 Ajax 发布的 AMD 模块。它正在工作,它将发布到我的服务器 api,但是 onreadystatechange 事件不会触发。你能看出我做错了什么吗?... define(['
我是一名优秀的程序员,十分优秀!