2012-11-19 134 views
0

我正在爲Firefox構建一個javascript組件,它將採用郵政編碼並返回當前的天氣狀況。javascript xpcom組件下載天氣地下天氣數據

The sample code that weather underground uses jQuery,但據我所知,我不能在JavaScript組件中包含此代碼,因爲JavaScript沒有包含其他JavaScript文件的功能。

無論如何,我已經構建了我的骨架代碼。這需要在郵政編碼並建立鏈接

(例如:http://api.wunderground.com/api/e17115d7e24a448e/geolookup/conditions/q/22203.json

我試圖下載來自該網址的數據,通過下面的方法:

getWeatherByUrl: function(url) 
{ 
    var persist = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].createInstance(Components.interfaces.nsIWebBrowserPersist); 
    var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD",Components.interfaces.nsILocalFile); 
    file.append("weather-forecaster.dat"); 
    var urlURI = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService).newURI(url, null, null);   
    persist.saveURI(urlURI,null,null,null,"",file); 
    return url; 
} 

這應該下載文件到用戶的配置文件目錄。確實確實在那裏創建文件。但是,它看起來並不像它包含來自地下天氣的json數據。

究竟發生了什麼?我將如何下載文件?我相信有一個查詢會在該URL傳遞給地下天氣時進行,但這應該不重要,因爲.json頁面是從它們中吐出來的,對吧?

有沒有辦法做到這一點,而無需下載文件,但通過流媒體和解析它?

回答

1

您可以簡單地使用XMLHttpRequest下載此數據:

var request = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"] 
         .createInstance(Components.interfaces.nsIXMLHttpRequest); 
request.open("GET", "http://api.wunderground.com/api/Your_Key/geolookup/conditions/q/IA/Cedar_Rapids.json"); 
request.addEventListener("load", function(event) 
{ 
    var data = JSON.parse(request.responseText); 
    alert(data.response.version); 
}, false); 
request.send(null);