Actionscript 3 如何向URL请求发送多个地址
我正在使用weather.com XML服务检索预测数据。我创建了一个UrlLoader实例,并将整个HTTP地址(包括凭据、位置和其他参数)传递给它。这与XML(urloader.data)功能配合使用效果非常好,因为我获得了指定位置ID的结果。然后,我使用E4X仅跟踪所需的节点。这一切都很好 棘手的是,我必须为另外19个城市做这件事。我已经在主类、主函数、私有函数onXmlLoaded中完成了初始工作。我尝试创建一个新的公共函数getCityName,生成新的URLRequest,跟踪XML并向我的组件添加值。但是,当我尝试此操作时,我收到: 错误5006:ActionScript文件不能有多个外部可见的定义 我如何轻松地设置URLRequest以请求所有20个城市的数据,然后解析结果?我是否将位置ID数组传递给URLRequest,因为这是HTTP请求中唯一不同的部分。我是否为20个查询中的每个查询创建单独的ActionScript文件,并使用它们自己的类和函数 代码如下:Actionscript 3 如何向URL请求发送多个地址,actionscript-3,Actionscript 3,我正在使用weather.com XML服务检索预测数据。我创建了一个UrlLoader实例,并将整个HTTP地址(包括凭据、位置和其他参数)传递给它。这与XML(urloader.data)功能配合使用效果非常好,因为我获得了指定位置ID的结果。然后,我使用E4X仅跟踪所需的节点。这一切都很好 棘手的是,我必须为另外19个城市做这件事。我已经在主类、主函数、私有函数onXmlLoaded中完成了初始工作。我尝试创建一个新的公共函数getCityName,生成新的URLRequest,跟踪XML
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;
我敢肯定,只有在类外定义了函数时,才会发生此错误: 例如:
package {
public class YourClass {
public function YourClass() {
//Constructor
}
public function correctFunction():void {
//No error.
}
}
public function errorFunction():void {
//will throw 5006 error.
}
}
只需循环。显然,根据您的需要更改链接
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);
}
}
}
var-weather:weather=newweather();
包{
公共天气{
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"
阿瓦尔[3]=”http://xoap.weather.com/weather/local/ASXX0274?dayf=1&link=xoap&par=1253350999&key=9a25cc224522c34a"
公众活动天气(){
对于(var i:int=0;我想了解有关在URL数组中循环的技巧。我应该如何将resultXML分配给特定的标签控件?例如,我将为堪培拉添加cblbllowtemp、cblblhitemp、cbuicondicon,并将为其他城市添加这些控件。或者,有没有更优化的方法将正确的跟踪分配给正确的标签方法是将cblbllowtemp、cblblhitemp、cbuicondicon作为参数传递到构造函数中,但这通常是不赞成的。另一种方法是使用setter和getter方法来分配它们。任何一种方法都可以工作,因为这将为类提供对这些对象的引用。您能给我一个使用getter/setter方法的语法示例吗分配它们?另外,当在扩展MovieClip的主类中使用上面的示例时,我收到错误1120未定义属性aVars的访问。我已经在公共函数Weather之前定义了这些属性,正如您的代码片段中所示。我如何修复此问题?实际上,我有一个更好的主意。我们需要将其转换为通用加载程序class和on response获得VAR。但要做到这一点,我需要知道更多的信息。你说你需要这样做19次。这是否意味着你有19*3(hi,low,icon)要填充的区域,还是通过在选定的城市中填充它们来重复使用它们?我有大约10个城市,每个城市都有hi、low和图标值。我不知道我可以为不同的城市重复使用标签。我该怎么做?谢谢:)