为什么我的XMLHttpRequest的readystate是4但是status是0?

问题描述 投票:0回答:4

我的 Chrome 扩展中有一个内容脚本,它在某些 HTTPS 页面上运行。它试图将 POST 请求发送到 HTTP 页面(通过后台脚本),这是我设置的 API 的路由。我正在尝试发送 JSON 数据。然而,即使就绪状态为 4,我的状态仍为 0。我使用 Postman 执行相同的操作,并且成功了。这让我相信这是一个 HTTPS 协议问题,但是我在同一后台脚本中的 HTTP 页面上执行 GET,并且工作正常。那可能是什么问题呢?这是我的邮政编码:

var string = json;
xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");

xhr.onreadystatechange = function () { 
    if (xhr.readyState == 4 && xhr.status == 200) {
        var json = JSON.parse(xhr.responseText);
    }
};
xhr.send(string);

谢谢!

更新:

我使用 chrome 开发者工具调试后台脚本,发现错误:“对预检请求的响应未通过访问控制检查:请求的资源上不存在‘Access-Control-Allow-Origin’标头.”。我猜后台脚本错误不会打印到主控制台。

更新:

我必须将我要发布到的网站添加到我的清单中的权限字段中。现在可以用了。

javascript post google-chrome-extension xmlhttprequest
4个回答
6
投票

我有一个类似的问题,经过几天的调试,我找到的唯一解决方案是通过将 XMLHttpRequest open 方法中的 async 参数设置为 false 来使 XMLHttpRequest 同步。


2
投票

readyState 值为 4 表示操作成功完成或失败。 status 属性初始化为 0,如果发生错误,状态属性将保持为 0。将事件处理程序分配给

xhr.onerror
属性,我打赌您会看到该处理程序被触发。 不幸的是,错误事件没有提供任何有关导致错误的原因的有用信息。

为了找出导致错误的原因,我将使用 Chrome 中的调试工具。菜单 => 更多工具 => 开发人员工具。然后转到“网络”选项卡。在那里您可以看到您的网页发出的所有 HTTP 请求。它将显示有关任何错误的更好详细信息。


0
投票

你做了什么?

我必须将要发布的网站添加到清单中的权限字段中。现在可以用了。

XMLHttpRequest.setRequestHeader("Access-Control-Allow-Origin", "the api website"); ?               

0
投票

在 mky 的情况下,我得到了状态 0',因为我在表单上使用了 javascript onClickButton() 函数,所以有两个!

© www.soinside.com 2019 - 2024. All rights reserved.