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