Javascript Firefox 49.0.2加载项的XMLHttpRequest状态0
我的Firefox WebExtensions插件的内容脚本中有一个XMLHttpRequest。问:为什么此请求的状态始终为0 这是发出请求的JavaScript代码:Javascript Firefox 49.0.2加载项的XMLHttpRequest状态0,javascript,ajax,firefox-addon,content-script,firefox-addon-webextensions,Javascript,Ajax,Firefox Addon,Content Script,Firefox Addon Webextensions,我的Firefox WebExtensions插件的内容脚本中有一个XMLHttpRequest。问:为什么此请求的状态始终为0 这是发出请求的JavaScript代码: var query = "http://api.wolframalpha.com/v2/query?appid=[MY-APP-ID]&includepodid=Comparison&scanner=Unit&format=plaintext&input=1%20lm"; var xhttp =
var query = "http://api.wolframalpha.com/v2/query?appid=[MY-APP-ID]&includepodid=Comparison&scanner=Unit&format=plaintext&input=1%20lm";
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function()
{
console.log("onreadystatechange");
console.log(this);
if (this.readyState == 4 && this.status == 200)
{
onSuccess(this.responseText);
}
};
xhttp.open("GET", query, true);
xhttp.send();
如果我打印每个onreadystatechange调用的请求结果,我会得到:
XMLHttpRequest { onreadystatechange: makeWolframRequest/xhttp.onreadystatechange(),
readyState: 1, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload,
responseURL: "", status: 0, statusText: "", responseType: "", response: "" }
XMLHttpRequest { onreadystatechange: makeWolframRequest/xhttp.onreadystatechange(),
readyState: 2, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload,
responseURL: "", status: 0, statusText: "", responseType: "", response: "" }
XMLHttpRequest { onreadystatechange: makeWolframRequest/xhttp.onreadystatechange(),
readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload,
responseURL: "", status: 0, statusText: "", responseType: "", response: "" }
我检查过的东西:
- 内容脚本应该能够根据请求进行跨域请求
- 向“”而不是“”发出请求
- 在这种情况下,这是一个CORS问题。我不得不将这个秘密酱添加到我的
manifest.json
文件中:
"permissions": [
"http://api.wolframalpha.com/*"
]
更多信息请点击此处:
非常感谢@adeneo坚持让我继续关注CORS问题。readystatechange事件在readystate更改时触发,前三次发生在服务器响应之前,在响应之前不能有状态代码,这就是为什么前三次是
0
,这也是我们检查readystate
是否为4
的原因,因为这表明得到了响应。问题可能不是三个firstreadystatechange
调用的状态代码,而是其他一些问题。根据我的实验,日志的readystate值是1、2,然后是4。我同意状态0对于状态1和状态2(在前两个日志中)是有意义的,但我担心的是readystate 4与状态0的组合。如果readystate为4时状态仍然为0
,则通常表明存在其他问题。我没有应用程序ID,无法测试,但我猜这是CORS错误。你为你的脚本设置了正确的权限了吗?如果你想,你可以发布一个答案供我选择,因为这确实是一个CORS问题。这个问题几乎肯定会在(OSX上的Ctrl-Shift-J或Cmd-Shift-J)中产生一些输出当你执行这段代码的时候,它会给你一个关于问题是什么的好主意。您也可以查看其中的一些,以查看有关此问题的信息。