我的AS3中有一个经常调用PHP文件的函数。它大部分时间都可以工作但偶尔会失败并抛出我在标题中使用的错误。我对此进行了相当广泛的研究,并开始以下列方式捕获事件:
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 :(得分:1)
显然问题是我正在调用的php文件是在我应该使用cURL的情况下使用file_get_contents进行网络调用。一旦我更改了它们,第二次网络呼叫就会停止失败,因此我不再看到错误。
答案 1 :(得分: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
答案 2 :(得分:0)
您是在本地主机上还是在网络上测试?如果您与托管php文件的计算机的网络连接正在退出,那么您可以期待IOErrorEvent。