Actionscript 3 我真的需要URLLoader的事件处理程序吗?

Actionscript 3 我真的需要URLLoader的事件处理程序吗?,actionscript-3,flash,Actionscript 3,Flash,我是actionscript的新手,我正在学习Joseph Devore的教程。我知道,当我想进行网络查询时,我可以创建一个URLRequest,并使用URLLoader发送它。我希望在URLLoader.data属性中找到响应数据,但在进行查询后,在我的示例中仍然为空。然后,似乎我必须创建一个事件处理来实际访问响应。这是真的吗 我编写了这个小示例代码,想知道如何(最简单的方法)访问这个get请求中的响应 package { import flash.events.Event;

我是actionscript的新手,我正在学习Joseph Devore的教程。我知道,当我想进行网络查询时,我可以创建一个URLRequest,并使用URLLoader发送它。我希望在URLLoader.data属性中找到响应数据,但在进行查询后,在我的示例中仍然为空。然后,似乎我必须创建一个事件处理来实际访问响应。这是真的吗

我编写了这个小示例代码,想知道如何(最简单的方法)访问这个get请求中的响应

package
{
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    public class stackQuery
    {
        public function stackQuery()
        {
        }

        public function makeQuery(): String {
            var request: URLRequest = URLRequest("http://www.google.com");
            var loader: URLLoader = new URLLoader();
            loader.addEventListener(Event.COMPLETE, handleResponse);
            try{
                loader.load(request);
            }
            if(loader.data == null){
                 return "Empty"
            }
            return "data not empty"
            }

            private function handleResponse(event:Event):void
            {
                //something with event.target.data here??
            }
    }
}

是的,当然是真的。假设您加载了1兆字节的数据。你需要时间来加载它,对吗?所以在下一行代码中不可能有这些数据

侦听器将在目标分派事件时执行—在您的情况下,当加载该MB时


这是正常的行为。

是的,当然是真的。假设您加载了1兆字节的数据。你需要时间来加载它,对吗?所以在下一行代码中不可能有这些数据

侦听器将在目标分派事件时执行—在您的情况下,当加载该MB时


这是正常的行为。

是的,当然是真的。假设您加载了1兆字节的数据。你需要时间来加载它,对吗?所以在下一行代码中不可能有这些数据

侦听器将在目标分派事件时执行—在您的情况下,当加载该MB时


这是正常的行为。

是的,当然是真的。假设您加载了1兆字节的数据。你需要时间来加载它,对吗?所以在下一行代码中不可能有这些数据

侦听器将在目标分派事件时执行—在您的情况下,当加载该MB时


这是一种正常的行为。

使用AS3进行同步加载(就像在其他一些语言中一样)没有任何好方法。您的数据为null,因为在AS3中,load命令是异步的——这意味着在加载完成之前,它不会停止应用程序的其余部分(将其锁定),它会继续执行下一行代码,并在加载完成后发送事件

下面是一个代码示例,说明您希望如何根据提供的代码处理此问题:

package
{
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.events.SecurityErrorEvent;
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    public class stackQuery
    {
        private var loader: URLLoader = new URLLoader(); //let's move it out to the class level so you can easily reference it from other methods (though this is purely optional)

        public function stackQuery()
        {
        }

        public function makeQuery(): String {
            var request:URLRequest = URLRequest("http://www.google.com");


            //add you listeners before loading
            loader.addEventListener(Event.COMPLETE, handleResponse);
            loader.addEventListener(IOErrorEvent.IO_ERROR, handleResponse); //it's good practice to also listen for errors
            loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleResponse); //this kind of error will happen if you're trying to load a local resource but have published as network only (or vice-versa)

            //load the request, any code after this will run before the load completes. 
            loader.load(request);
        }

            //this function will run once the load completes
        private function handleResponse(event:Event):void
        {
            if (event is IOErrorEvent) {
                //you had an IO error, better do something 
                return;
            }

            if (event is SecurityErrorEvent) {
                //url wasn't allowed to load
                return;
            }

            trace(loader.data); //this is what was returned from the page
                //you could also get it by referencing the currentTarget of the event
                trace(URLLoader(event.currentTarget).data);
        }
    }
}

使用AS3进行同步加载(就像在其他一些语言中一样)没有任何好方法。您的数据为null,因为在AS3中,load命令是异步的——这意味着在加载完成之前,它不会停止应用程序的其余部分(将其锁定),它会继续执行下一行代码,并在加载完成后发送事件

下面是一个代码示例,说明您希望如何根据提供的代码处理此问题:

package
{
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.events.SecurityErrorEvent;
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    public class stackQuery
    {
        private var loader: URLLoader = new URLLoader(); //let's move it out to the class level so you can easily reference it from other methods (though this is purely optional)

        public function stackQuery()
        {
        }

        public function makeQuery(): String {
            var request:URLRequest = URLRequest("http://www.google.com");


            //add you listeners before loading
            loader.addEventListener(Event.COMPLETE, handleResponse);
            loader.addEventListener(IOErrorEvent.IO_ERROR, handleResponse); //it's good practice to also listen for errors
            loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleResponse); //this kind of error will happen if you're trying to load a local resource but have published as network only (or vice-versa)

            //load the request, any code after this will run before the load completes. 
            loader.load(request);
        }

            //this function will run once the load completes
        private function handleResponse(event:Event):void
        {
            if (event is IOErrorEvent) {
                //you had an IO error, better do something 
                return;
            }

            if (event is SecurityErrorEvent) {
                //url wasn't allowed to load
                return;
            }

            trace(loader.data); //this is what was returned from the page
                //you could also get it by referencing the currentTarget of the event
                trace(URLLoader(event.currentTarget).data);
        }
    }
}

使用AS3进行同步加载(就像在其他一些语言中一样)没有任何好方法。您的数据为null,因为在AS3中,load命令是异步的——这意味着在加载完成之前,它不会停止应用程序的其余部分(将其锁定),它会继续执行下一行代码,并在加载完成后发送事件

下面是一个代码示例,说明您希望如何根据提供的代码处理此问题:

package
{
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.events.SecurityErrorEvent;
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    public class stackQuery
    {
        private var loader: URLLoader = new URLLoader(); //let's move it out to the class level so you can easily reference it from other methods (though this is purely optional)

        public function stackQuery()
        {
        }

        public function makeQuery(): String {
            var request:URLRequest = URLRequest("http://www.google.com");


            //add you listeners before loading
            loader.addEventListener(Event.COMPLETE, handleResponse);
            loader.addEventListener(IOErrorEvent.IO_ERROR, handleResponse); //it's good practice to also listen for errors
            loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleResponse); //this kind of error will happen if you're trying to load a local resource but have published as network only (or vice-versa)

            //load the request, any code after this will run before the load completes. 
            loader.load(request);
        }

            //this function will run once the load completes
        private function handleResponse(event:Event):void
        {
            if (event is IOErrorEvent) {
                //you had an IO error, better do something 
                return;
            }

            if (event is SecurityErrorEvent) {
                //url wasn't allowed to load
                return;
            }

            trace(loader.data); //this is what was returned from the page
                //you could also get it by referencing the currentTarget of the event
                trace(URLLoader(event.currentTarget).data);
        }
    }
}

使用AS3进行同步加载(就像在其他一些语言中一样)没有任何好方法。您的数据为null,因为在AS3中,load命令是异步的——这意味着在加载完成之前,它不会停止应用程序的其余部分(将其锁定),它会继续执行下一行代码,并在加载完成后发送事件

下面是一个代码示例,说明您希望如何根据提供的代码处理此问题:

package
{
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.events.SecurityErrorEvent;
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    public class stackQuery
    {
        private var loader: URLLoader = new URLLoader(); //let's move it out to the class level so you can easily reference it from other methods (though this is purely optional)

        public function stackQuery()
        {
        }

        public function makeQuery(): String {
            var request:URLRequest = URLRequest("http://www.google.com");


            //add you listeners before loading
            loader.addEventListener(Event.COMPLETE, handleResponse);
            loader.addEventListener(IOErrorEvent.IO_ERROR, handleResponse); //it's good practice to also listen for errors
            loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleResponse); //this kind of error will happen if you're trying to load a local resource but have published as network only (or vice-versa)

            //load the request, any code after this will run before the load completes. 
            loader.load(request);
        }

            //this function will run once the load completes
        private function handleResponse(event:Event):void
        {
            if (event is IOErrorEvent) {
                //you had an IO error, better do something 
                return;
            }

            if (event is SecurityErrorEvent) {
                //url wasn't allowed to load
                return;
            }

            trace(loader.data); //this is what was returned from the page
                //you could also get it by referencing the currentTarget of the event
                trace(URLLoader(event.currentTarget).data);
        }
    }
}

虽然给出的答案是正确的,但真正的解释是ActionScript3是一种异步语言,而不是像Python这样的同步语言。在python中,加载url之类的内容后,下一行代码将不会执行,直到加载url(这可能会造成延迟或空闲执行),而在Actionscript 3中,代码执行不会等待并移动到下一行。这就是您需要使用事件(Actionscript 3是一种基于事件的语言)的原因,这样您就可以在代码仍在执行时发现等待的数据何时可用。

如果给出的答案正确,真正的解释是,ActionScript3是一种异步语言,与其他同步语言(例如Python)相反。在python中,加载url之类的内容后,下一行代码将不会执行,直到加载url(这可能会造成延迟或空闲执行),而在Actionscript 3中,代码执行不会等待并移动到下一行。这就是您需要使用事件(Actionscript 3是一种基于事件的语言)的原因,这样您就可以在代码仍在执行时发现等待的数据何时可用。

如果给出的答案正确,真正的解释是,ActionScript3是一种异步语言,与其他同步语言(例如Python)相反。在python中,加载url之类的内容后,下一行代码将不会执行,直到加载url(这可能会造成延迟或空闲执行),而在Actionscript 3中,代码执行不会等待并移动到下一行。这就是您需要使用事件(Actionscript 3是一种基于事件的语言)的原因,这样您就可以在代码仍在执行时发现等待的数据何时可用。

如果给出的答案正确,真正的解释是,ActionScript3是一种异步语言,与其他同步语言(例如Python)相反。在python中,加载url之类的内容后,在加载url之前,不会执行下一行代码(w