Javascript &引用;XMLHttpRequest不是构造函数;错误,与Mozilla文档在浏览器chrome中的使用相反

Javascript &引用;XMLHttpRequest不是构造函数;错误,与Mozilla文档在浏览器chrome中的使用相反,javascript,xmlhttprequest,firefox-addon,mozilla,firefox-addon-sdk,Javascript,Xmlhttprequest,Firefox Addon,Mozilla,Firefox Addon Sdk,我正在使用插件SDK构建一个Mozilla插件。我需要写一篇AJAX文章,所以我使用的是XMLHttpRequest。其中说XMLHttpRequest 无法使用XMLHttpRequest()构造函数实例化。构造函数没有在组件内部定义,代码会导致错误。解决此问题的最佳方法是使用XPCOM组件构造函数 医生说这样做: const XMLHttpRequest = Components.Constructor["@mozilla.org/xmlextras/xmlhttprequest;1"];

我正在使用插件SDK构建一个Mozilla插件。我需要写一篇AJAX文章,所以我使用的是
XMLHttpRequest
。其中说
XMLHttpRequest

无法使用XMLHttpRequest()构造函数实例化。构造函数没有在组件内部定义,代码会导致错误。解决此问题的最佳方法是使用XPCOM组件构造函数

医生说这样做:

const XMLHttpRequest = Components.Constructor["@mozilla.org/xmlextras/xmlhttprequest;1"];
var oReq = new XMLHttpRequest();
好的。因此,我完全按照文档中显示的方式实现代码:

var { Cc, Cu, Ci, Cr, Cm, components } = require('chrome');
const XMLHttpRequest = components.Constructor["@mozilla.org/xmlextras/xmlhttprequest;1"];
. . .
var oReq = new XMLHttpRequest();
我在这一行得到一个“XMLHttpRequest不是构造函数”错误

我错过了什么?我做错了什么?我不能使用“
Components.Constructor[”@…
”方式,因为生成
.xpi
文件的插件SDK CLI工具抱怨说

使用“组件”访问chrome授权。为此,您需要添加一行类似以下内容的内容:

const{components}=require(“chrome”);

然后,您可以使用从“chrome”模块导入的属性的任何快捷方式(“Cc”、“Ci”、“Cm”、“Cr”和“Cu”分别用于“类”、“接口”、“管理器”、“结果”和“utils”属性。而
组件
用于
组件
对象本身)

好的,很好。我确实在我的文件顶部有
require(chrome)
调用,生成快捷方式,然后生成有趣的
组件,这是正确的形式,插件编译器的消息说要使用。但是我得到了错误

非常感谢您的帮助。

您应该在附加SDK中使用

如果出于某种原因,您仍然希望直接使用
nsIXMLHttpRequest
,请注意,在SDK模块中生成构造函数的正确方法是:

XMLHttpRequest=components.Constructor(
“@mozilla.org/xmlextas/xmlhttprequest;1”,
“nsIXMLHttpRequest”);
除了
components.Constructor()
在SDK中似乎不起作用之外。因此最好直接创建实例:

var{Cc,Ci}=require('chrome');
var r=Cc[“@mozilla.org/xmlextas/xmlhttprequest;1”]。
createInstance(Ci.nsIXMLHttpRequest);
r、 打开(“获取”http://example.org/");
r、 addEventListener(“loadend”,函数(e){
log(this,e,e.type,this.responseText);
});
r、 send();
MDN wiki(!)信息根本不正确。我现在编辑了文章并设置了“需要技术审查”标志。

您应该在附加SDK中使用

如果出于某种原因,您仍然希望直接使用
nsIXMLHttpRequest
,请注意,在SDK模块中生成构造函数的正确方法是:

XMLHttpRequest=components.Constructor(
“@mozilla.org/xmlextas/xmlhttprequest;1”,
“nsIXMLHttpRequest”);
除了
components.Constructor()
在SDK中似乎不起作用之外。因此最好直接创建实例:

var{Cc,Ci}=require('chrome');
var r=Cc[“@mozilla.org/xmlextas/xmlhttprequest;1”]。
createInstance(Ci.nsIXMLHttpRequest);
r、 打开(“获取”http://example.org/");
r、 addEventListener(“loadend”,函数(e){
log(this,e,e.type,this.responseText);
});
r、 send();
MDN wiki(!)信息根本不正确。我现在编辑了文章并设置了“需要技术审查”标志。

或:

const { XMLHttpRequest } = require('sdk/net/xhr');

let r = new XMLHttpRequest();

console.dir(r);
r.open("GET", "http://example.org/");
r.addEventListener("loadend", function(e) {
    console.log(this, e, e.type, this.responseText);
});
r.send();
有关更多信息和限制,请参阅。

或:

const { XMLHttpRequest } = require('sdk/net/xhr');

let r = new XMLHttpRequest();

console.dir(r);
r.open("GET", "http://example.org/");
r.addEventListener("loadend", function(e) {
    console.log(this, e, e.type, this.responseText);
});
r.send();

有关更多信息和限制,请参阅。

谢谢,@nmaier-非常感谢您的帮助。我将尝试
请求
和您编辑的XMLHttpRequest编辑。我忘记了
请求
-可能是最简单的方法。再次感谢您~您好,nmaier:另一个问题:假设我使用
nsIXMLHttpRequest
表单,如上面所示(这似乎很好),当你写一篇文章时,你发送的内容的名称是什么?我问这个问题是因为在我处理文章的服务器端,我无法获取文章的内容;我使用的是Node.js,你通过
request.body
提取文章的内容,它可以有带值的键。但在我的情况下,没有任何内容显示为o正在发送。我正在发送(URI编码)string;我应该改为发送由键和值组成的对象吗?谢谢!谢谢,@nmaier-非常感谢您的帮助。我将尝试
请求
和您编辑的XMLHttpRequest编辑。我忘记了
请求
-可能是最简单的方法。再次感谢您~再次问候,nmaier:还有一个问题要问您:Assuming我使用
nsIXMLHttpRequest
表单,如您上面所示(它似乎工作正常),当你写一篇文章时,你发送的内容的名称是什么?我问这个问题是因为在我处理文章的服务器端,我无法获取文章的内容;我使用的是Node.js,你通过
request.body
提取文章的内容,它可以有带值的键。但在我的情况下,没有任何内容显示为o正在发送。我正在发送(URI编码)string;我应该发送一个由键和值组成的对象吗?谢谢!谢谢你,canuckistani。我认为尽管这种方法有各种限制和不稳定的名称,使用
请求
可能是更好的选择。但是,这是一个有效的建议,我感谢你花时间回答我的问题。干杯!谢谢你,canuckistani。我认为,尽管这种方法存在种种限制和不稳定的名称,使用
请求
可能是更好的选择。但是,这是一个有效的建议,我感谢你花时间回答我的问题。干杯!