2013-10-11 28 views
2

我正在用我的firefox sdk做一个服务器请求,它回复了一个XML文件。Firefox SDK多次请求

我解析XML文件的两个特殊值,并将它们放到全局数组中(在我的onComplete函数中)。

我的问题是,该数组不保存元素01中的值,我不知道为什么!

我的第二个问题是,我想在我的插件中为当前选项卡url(这意味着不止一次)请求一个请求。我知道请求模块说“每个请求对象被设计为只能使用一次”,但可以多次调用它吗?

我总是得到这样的错误:

Error: This request object has been used already. You must create a new one to make a new request.

var Request = require("request").Request; 
var {Cc, Ci} = require("chrome"); 
var parser = Cc["@mozilla.org/xmlextras/domparser;1"].createInstance(Ci.nsIDOMParser); 
var setURL = "example.org"; 
var exampleArray = new Array(); 

function parseResponse(response) { 
    var xml = parser.parseFromString(response.text, "application/xml"); 
    exampleArray[0] = xml.getElementsByTagName("example")[0].getAttribute("example"); // integer value 
    exampleArray[1] = xml.getElementsByTagName("example2")[0].getAttribute("example2"); //integer value 
} 

var exampleRequest = Request({ 
     url: "http://www.example.com", 
     onComplete: parseResponse, 
}) 
exampleRequest.get(); 

console.log("exampleArray" + exampleArray.length); //always 0 

感谢

回答

1

只是包装您的请求调用的函数,可重复使用。 Request是一个构造函数,所以你可以实例化几个请求。但是每个请求只能请求一个URL。

function request (url) { 
    Request({ 
    url: url 
    onComplete: parseResponse, 
    }).get(); 
} 

对于XML问题,只是控制台记录单个节点,可能不是你期望的某个地方。

+0

非常感谢您的解决方案,没想到会更容易地使用请求:) 当我在parseResponse函数中记录我的示例数组时,它工作正常,但它不是全局保存,我不明白:( – romanskie

+0

那么在每个'parseResponse'上,你会在每次调用时重写数组的前两个值。也许你的意思是使用push来代替?https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push – jsantell

+0

我想我的问题是,我没有想到javascript的异步,有朋友告诉我,我必须在这里使用回调,所以我会给它是一个尝试! – romanskie