Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox 49.0.2加载项的XMLHttpRequest状态0_Javascript_Ajax_Firefox Addon_Content Script_Firefox Addon Webextensions - Fatal编程技术网

Javascript Firefox 49.0.2加载项的XMLHttpRequest状态0

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 =

我的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 = 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
      的原因,因为这表明得到了响应。问题可能不是三个first
      readystatechange
      调用的状态代码,而是其他一些问题。根据我的实验,日志的readystate值是1、2,然后是4。我同意状态0对于状态1和状态2(在前两个日志中)是有意义的,但我担心的是readystate 4与状态0的组合。如果readystate为
      4时状态仍然为
      0
      ,则通常表明存在其他问题。我没有应用程序ID,无法测试,但我猜这是CORS错误。你为你的脚本设置了正确的权限了吗?如果你想,你可以发布一个答案供我选择,因为这确实是一个CORS问题。这个问题几乎肯定会在(OSX上的Ctrl-Shift-J或Cmd-Shift-J)中产生一些输出当你执行这段代码的时候,它会给你一个关于问题是什么的好主意。您也可以查看其中的一些,以查看有关此问题的信息。