为什么我的XMLHttpRequest有readystate 4但状态为0?

时间:2016-04-05 03:02:10

标签: javascript post google-chrome-extension xmlhttprequest

我的Chrome扩展程序中有一个内容脚本,可以在某个HTTPS页面上运行。它正在尝试向HTTP页面发送POST请求(通过后台脚本),这是我已设置的API的路由。我正在尝试发送JSON数据。但是我得到状态0,即使就绪状态是4.我使用Postman执行相同的帖子并且它有效。这让我相信它是一个HTTPS协议问题,但是我在同一个后台脚本的HTTP页面上执行GET并且工作正常。那可能是什么问题呢?这是我的POST代码:

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开发人员工具来调试后台脚本,我发现错误,这是"对预检请求的响应没有通过访问控制检查:否'访问控制 - 允许-Origin'标头出现在请求的资源上。"。我猜背景脚本错误不会打印到主控台。

更新:

我必须将我发布的网站添加到我的清单中的权限字段中。它现在有效。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

readyState值为4表示操作成功完成或失败。 status属性初始化为0,如果发生错误,将保持为0。为xhr.onerror属性分配一个事件处理程序,我打赌你会看到该处理程序触发。 很遗憾,错误事件并未提供有关错误原因的任何有用信息。

要找出导致错误的原因,我会使用Chrome中的调试工具。 Menu =>更多工具=>开发者工具。然后转到"网络"标签。在那里,您可以看到您的网页所做的所有HTTP请求。它将显示有关任何错误的更好细节。

答案 2 :(得分:0)

你做了什么?

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

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