如何向URLRequest发送多个地址

时间:2011-05-17 21:14:03

标签: actionscript-3

我正在使用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;

2 个答案:

答案 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.
    }
}