Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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 XMLHttpRequest未接收任何数据或仅接收“数据”;“未定义”;_Javascript_Firefox Addon_Xmlhttprequest - Fatal编程技术网

Javascript XMLHttpRequest未接收任何数据或仅接收“数据”;“未定义”;

Javascript XMLHttpRequest未接收任何数据或仅接收“数据”;“未定义”;,javascript,firefox-addon,xmlhttprequest,Javascript,Firefox Addon,Xmlhttprequest,我尝试制作一个Firefox插件,它在Javascript中运行XMLHttp请求。我想从该请求中获取数据并将其发送到*.body.innerhtml 这是我到目前为止的代码 var xhr = new XMLHttpRequest(); xhr.open("GET", "http://xx.xxxxx.com", true); xhr.send(); setTimeout(function() { set_body(xhr.responseHtml); }, 6000); 我没有收到数据,而

我尝试制作一个Firefox插件,它在Javascript中运行XMLHttp请求。我想从该请求中获取数据并将其发送到*.body.innerhtml

这是我到目前为止的代码

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://xx.xxxxx.com", true);
xhr.send();
setTimeout(function() { set_body(xhr.responseHtml); }, 6000);
我没有收到数据,而是得到“未定义”。如果我将xhr.responseHtml更改为responseText,我将一无所获。我不知道为什么我一无所获。我正在用Firefox12.0开发Ubuntu12.04LTS

如果您需要更多关于脚本的详细信息,请询问

更新:

集合体函数

document.body.innerHTML = '';
document.body.innerHTML = body;
document.close();

当您将open的最后一个参数设置为true时,您正在请求一个异步事件。因此,您需要向xhr添加回调,如下所示:

xhr.onReadyStateChange = function(){
   // define what you want to happen when server returns
}

当服务器响应时调用。要在不使用async的情况下进行测试,请将第三个参数设置为false。然后send()将阻塞并在那里等待,直到响应返回。将任意超时设置为6秒不是处理此问题的正确方法。

当您将open的最后一个参数设置为true时,您请求的是异步事件。因此,您需要向xhr添加回调,如下所示:

xhr.onReadyStateChange = function(){
   // define what you want to happen when server returns
}
当服务器响应时调用。要在不使用async的情况下进行测试,请将第三个参数设置为false。然后send()将阻塞并在那里等待,直到响应返回。将任意超时设置为6秒不是处理此问题的正确方法。

此代码应该可以工作:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState == 4) {
    set_body(xhr.responseText);
  }
};
xhr.open("GET", "http://xx.xxxxx.com", true);
xhr.send();
确保您从URL获得正确的响应。您可能有跨域调用问题。如果您在域中有一个页面,并且您试图从域中执行XMLHttpRequest,Firefox将以静默方式失败(将不会出现错误消息、没有响应、什么也没有)。这是一种防止XSS(跨站点脚本)的安全措施

无论如何,如果您从
chrome://
协议执行XMLHttpRequest,它被认为是安全的,并且可以工作。因此,请确保您使用此代码,并从您的插件发出请求,而不是从您的本地主机或类似的东西发出请求。

此代码应该可以工作:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState == 4) {
    set_body(xhr.responseText);
  }
};
xhr.open("GET", "http://xx.xxxxx.com", true);
xhr.send();
确保您从URL获得正确的响应。您可能有跨域调用问题。如果您在域中有一个页面,并且您试图从域中执行XMLHttpRequest,Firefox将以静默方式失败(将不会出现错误消息、没有响应、什么也没有)。这是一种防止XSS(跨站点脚本)的安全措施

无论如何,如果您从
chrome://
协议执行XMLHttpRequest,它被认为是安全的,并且可以工作。因此,请确保使用此代码,并从您的加载项发出请求,而不是从您的本地主机或类似的东西发出请求。

更新解决:

我必须确定RequestHeader(就在xhr.open之后):

对于以下项目:主机、来源和引用。因此,同一原产地政策似乎确实存在问题

但现在它起作用了!谢谢大家

更新已解决:

我必须确定RequestHeader(就在xhr.open之后):

对于以下项目:主机、来源和引用。因此,同一原产地政策似乎确实存在问题


但现在它起作用了!谢谢大家

var xhr=new-XMLHttpRequest();xhr.open(“GET”http://w69b-groove.appspot.com“,对);xhr.onReadyStateChange=function(){if(xhr.readystate==4&&xhr.status==200){set_body(xhr.responseText,doc);}否则{alert('Connection didnt work…');}}}xhr.send()我更改了它,但它不工作…你在哪个浏览器中?XMLHttpRequest在IE中不起作用。当你说它“不起作用”时,你到底看到了什么?正如我前面提到的,我使用的是FF 12.0。我只是看到我的“连接…”文本。就在XMLHttpRequest不是
onReadyStateChange
而是
onReadyStateChange
之前,JavaScript是区分大小写的;xhr.open(“GET”http://w69b-groove.appspot.com“,对);xhr.onReadyStateChange=function(){if(xhr.readystate==4&&xhr.status==200){set_body(xhr.responseText,doc);}否则{alert('Connection didnt work…');}}}xhr.send()我更改了它,但它不工作…你在哪个浏览器中?XMLHttpRequest在IE中不起作用。当你说它“不起作用”时,你到底看到了什么?正如我前面提到的,我使用的是FF 12.0。我只是看到我的“连接…”文本。就在XMLHttpRequest不是
onReadyStateChange
而是
onReadyStateChange
之前,JavaScript是区分大小写的。非常感谢您的回答!我实施了你的解决方案。但我似乎遇到了跨域错误。它只是默默地打开“Conconnecting…”,我的网络插件不会抛出任何新请求。我是从example.com打来的,但我是从req.example2.com打来的。如何从我的加载项执行HTTP请求?(正如您提到的“chrome://”)根据我的经验,处理跨域请求的最简单方法是在服务器上创建一个透明代理。例如,处的每个请求都从中获取内容并返回,而不做任何更改。@Poundty:Firefox扩展没有相同的源限制。除非您的代码在内容脚本中运行,否则您应该能够发出跨域请求。非常感谢您的回答!我实施了你的解决方案。但我似乎遇到了跨域错误。它只是默默地打开“Conconnecting…”,我的网络插件不会抛出任何新请求。我是从example.com打来的,但我是从req.example2.com打来的。如何从我的加载项执行HTTP请求?(正如您提到的“chrome://”)根据我的经验,处理跨域请求的最简单方法是在服务器上创建一个透明代理。例如,处的每个请求都从中获取内容并返回,而不做任何更改。@Poundty:Firefox扩展没有相同的源限制。除非代码在内容脚本中运行,否则您应该能够发出跨域请求。