我正在使用weather.com XML服务来检索预测数据。我创建了一个UrlLoader实例,并将整个HTTP地址(包括凭据,位置和其他参数)传递给它。这与XML(urlLoader.data)功能协同工作非常有效,因为我得到了指定位置ID的结果。然后我使用E4X来跟踪所需的节点。这一切都很好。
棘手的部分是我必须为另外19个城市做这件事。我已经完成了Main类,Main函数,私有函数onXmlLoaded的初始工作。我尝试创建一个新的公共函数getCityName,创建新的URLRequest,跟踪XML并向我的组件添加值。但是,当我尝试这个时,我会收到:
错误5006:ActionScript文件不能有多个外部可见定义。
如何轻松设置URLRequest以请求所有20个城市的数据,然后解析结果?我是否将一组位置ID传递给URLRequest,因为这是HTTP请求中唯一不同的部分。我是否为20个查询中的每一个创建了具有自己的类和函数的单独ActionScript文件?
以下是代码:
public class Main extends MovieClip
{
public function Main()
{
var urlRequest:URLRequest = new URLRequest("http://xoap.weather.com/weather/local/ASXX0274?dayf=1&link=xoap&par=1253350999&key=9a25cc224522c34a");
var urlLoader:URLLoader=new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, onXmlLoaded);
urlLoader.load(urlRequest);
}
public function onXmlLoaded(event:Event): void
{
XML.ignoreWhitespace = true;
var urlLoader:URLLoader = event.currentTarget as URLLoader;
var resultXML:XML = XML(urlLoader.data);
trace(resultXML.dayf.day.hi);
trace(resultXML.dayf.day.low);
trace(resultXML.dayf.day.part.(@p=="d").icon);
lbllowtemp.text= String(resultXML.dayf.day.low);
lblhitemp.text=String(resultXML.dayf.day.hi);
uicondicon.source=String(resultXML.dayf.day.part.(@p=="d").icon)+".png";
var tf:TextFormat = new TextFormat;
tf.color=0xFFFFFF;
tf.font="Arial";
tf.size=16;
tf.bold=true;
lbllowtemp.setStyle("textFormat",tf);
lblhitemp.setStyle("textFormat",tf);
}
public function getCanberra()
{
var urlRequest:URLRequest = new URLRequest("http://xoap.weather.com/weather/local/ASXX023?dayf=1&link=xoap&par=1253350999&key=9a25cc224522c34a");
var urlLoader:URLLoader=new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, onXmlLoaded);
urlLoader.load(urlRequest);
XML.ignoreWhitespace = true;
var urlLoader:URLLoader = event.currentTarget as URLLoader;
var resultXML:XML = XML(urlLoader.data);
trace(resultXML.dayf.day.hi);
trace(resultXML.dayf.day.low);
trace(resultXML.dayf.day.part.(@p=="d").icon);
lblCBlowtemp.text= String(resultXML.dayf.day.low);
lblCBhitemp.text=String(resultXML.dayf.day.hi);
uiCBcondicon.source=String(resultXML.dayf.day.part.(@p=="d").icon)+".png";
var tf:TextFormat = new TextFormat;
tf.color=0xFFFFFF;
tf.font="Arial";
tf.size=16;
tf.bold=true;
lblCBlowtemp.setStyle("textFormat",tf);
lblCBhitemp.setStyle("textFormat",tf);
}
}
当我现在调试时,我在我的getCanberra函数中收到错误1120访问未定义属性事件:
var urlLoader:URLLoader = event.currentTarget as URLLoader;
答案 0 :(得分:1)
只是循环。
显然可以根据需要更改链接
var weather:Weather = new Weather( );
package {
public class Weather{
public var aVars:Array = new Array();
aVars[0] = "http://xoap.weather.com/weather/local/ASXX0274?dayf=1&link=xoap&par=1253350999&key=9a25cc224522c34a"
aVars[1] = "http://xoap.weather.com/weather/local/ASXX0274?dayf=1&link=xoap&par=1253350999&key=9a25cc224522c34a"
aVars[2] = "http://xoap.weather.com/weather/local/ASXX0274?dayf=1&link=xoap&par=1253350999&key=9a25cc224522c34a"
aVars[3] = "http://xoap.weather.com/weather/local/ASXX0274?dayf=1&link=xoap&par=1253350999&key=9a25cc224522c34a"
public function Weather() {
for( var i:int = 0; i<aVars.length; i++){
var urlRequest:URLRequest=new URLRequest(aVars[i]);
var urlLoader:URLLoader=new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, onXmlLoaded);
urlLoader.load(urlRequest);
}
}
public function onXmlLoaded(event:Event):void {
XML.ignoreWhitespace=true;
var urlLoader:URLLoader=event.currentTarget as URLLoader;
var resultXML:XML=XML(urlLoader.data);
trace(resultXML.dayf.day.hi);
trace(resultXML.dayf.day.low);
trace(resultXML.dayf.day.part.(@p=="d").icon);
lbllowtemp.text=String(resultXML.dayf.day.low);
lblhitemp.text=String(resultXML.dayf.day.hi);
uicondicon.source=String(resultXML.dayf.day.part.(@p=="d").icon)+".png";
// note that tf has not been added to the display list so will not be visible
var tf:TextFormat=new TextFormat ;
tf.color=0xFFFFFF;
tf.font="Arial";
tf.size=16;
tf.bold=true;
lbllowtemp.setStyle("textFormat",tf);
lblhitemp.setStyle("textFormat",tf);
}
}
}
答案 1 :(得分:0)
我非常确定只有在课堂外定义了函数时才会出现此错误:
例如:
package {
public class YourClass {
public function YourClass() {
//Constructor
}
public function correctFunction():void {
//No error.
}
}
public function errorFunction():void {
//will throw 5006 error.
}
}