我正在为Firefox构建一个javascript组件,它将接收邮政编码,并将返回当前的天气状况。
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数据。
究竟发生了什么?我该如何下载文件?我相信当这个网址被传递到地下天气时会有一个查询,但这并不重要,因为.json页面是从它们吐出来的,对吗?
有没有办法在不下载文件的情况下执行此操作,但是通过流式传输并解析它?
答案 0 :(得分: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);