2011-12-20 104 views
0

我在我的AS3中经常调用一个PHP文件的函数。大多数时候它工作,但偶尔会失败并抛出标题中使用的错误。我研究这个相当广泛,并开始以下列方式捕获事件:错误#2044:未处理ioError :.文本=错误#2032:流错误。在AS3

public static function Bar():void { 
    var request:URLRequest = new URLRequest("path/to/file.php"); 
    var requestVariables:URLVariables = new URLVariables(); 
    var loader:URLLoader = new URLLoader(); 

    requestVariables.event = "foo"; 

    request.method = URLRequestMethod.POST; 
    request.data = requestVariables; 

    loader.dataFormat = URLLoaderDataFormat.TEXT; 
    loader.load(request); 
    loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true); 
    loader.addEventListener(Event.COMPLETE, onIOComplete, false, 0, true); 
} 

private static function onIOComplete(e:Event):void 
{ 
    var loader:Loader = e.target as Loader; 
    if (loader != null) 
    { 
     loader.removeEventListener(IOErrorEvent.IO_ERROR, onIOError); 
     loader.removeEventListener(Event.COMPLETE, onIOComplete); 
    } 
    Logger.log("LOADER COMPLETE"); 
} 

private static function onIOError(e:IOErrorEvent):void 
{ 
    var loader:Loader = e.target as Loader; 
    if (loader != null) 
    { 
     loader.removeEventListener(IOErrorEvent.IO_ERROR, onIOError); 
     loader.removeEventListener(Event.COMPLETE, onIOComplete); 
    } 
    Logger.log("ERROR: " + e.toString()); 
} 

尽管上面的代码中,我还偶尔看到的误差。有更多的我应该/可以做些什么?

+0

究竟在哪里抛出错误?您可以在调试中运行它并逐步完成。我想到的第一件事就是使用try catch块,但是确切知道哪一行代码导致错误将是首要问题。 – ToddBFisher 2011-12-20 18:25:09

+0

可能“路径/到/ file.php”是问题?也许“http://url/to/file.php”会工作... – Frank 2011-12-20 20:21:53

回答

1

显然问题是我打电话的php文件是在使用cURL的情况下使用file_get_contents进行网络调用。一旦我改变他们,第二次网络呼叫停止失败,因此我停止看到错误。

0
import flash.events.Event; 
import flash.events.IOErrorEvent; 
import flash.net.URLRequest; 
import flash.net.URLVariables; 
import flash.net.URLLoader; 
import flash.net.URLRequestMethod; 
import flash.net.URLLoaderDataFormat; 
import flash.display.Loader; 

function Bar():void { 
    var request:URLRequest = new URLRequest("http://127.0.0.1/test.php"); 
    var requestVariables:URLVariables = new URLVariables(); 
    var loader:URLLoader = new URLLoader(); 

    requestVariables.event = "foo"; 

    request.method = URLRequestMethod.POST; 
    request.data = requestVariables; 

    loader.dataFormat = URLLoaderDataFormat.TEXT; 
    loader.load(request); 
    loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true); 
    loader.addEventListener(Event.COMPLETE, onIOComplete, false, 0, true); 
} 

function onIOComplete(e:Event):void 
{ 
    var loader:Loader = e.target as Loader; 
    if (loader != null) 
    { 
     loader.removeEventListener(IOErrorEvent.IO_ERROR, onIOError); 
     loader.removeEventListener(Event.COMPLETE, onIOComplete); 
    } 
    trace("LOADER COMPLETE"); 
} 

function onIOError(e:IOErrorEvent):void 
{ 
    var loader:Loader = e.target as Loader; 
    if (loader != null) 
    { 
     loader.removeEventListener(IOErrorEvent.IO_ERROR, onIOError); 
     loader.removeEventListener(Event.COMPLETE, onIOComplete); 
    } 
    trace("ERROR: " + e.toString()); 
} 

Bar(); 

我只得到LOADER COMPLETE

0

你是在本地主机上测试此,或在网络上?如果您的网络连接到托管php文件的计算机已经失效,那么您可以期待一个IOErrorEvent。

+0

这是在网络上。 – keybored 2011-12-21 04:43:19

+0

然后,这很可能是一个网络问题。您可以使用IOErrorEvent处理程序通过等待很短的时间并再次发送请求来处理间歇性的网络连接。根据您正在做的事情,您可能需要跟踪重新加载的次数,以便经过一定次数的尝试后,您可以放弃并提醒用户应用程序无法联系服务器。 – duggulous 2011-12-21 19:29:54

相关问题