我的事件监听器与 URLLoader 有问题,但这个问题发生在 IE 中,而不是 FF 中。
public function getUploadURL():void {
var request:URLRequest = new URLRequest();
request.url = getPath();
request.method = URLRequestMethod.GET;
_loader = new URLLoader();
_loader.dataFormat = URLLoaderDataFormat.TEXT;
_loader.addEventListener(Event.COMPLETE, getBaseURL);
_loader.load(request);
}
private function getBaseURL(event:Event):void {
_loader.removeEventListener(Event.COMPLETE, getBaseURL);
}
问题是我的 getBaseURL 在我至少执行了一次代码后会自动执行,但这仅在 IE 中是这种情况。发生的情况是我调用我的 getUploadURL,我确保服务器发送一个将导致 Event.COMPLETE 的事件,因此 getBaseURL 被执行,并且侦听器被删除。如果我调用 getUploadURL 方法并输入错误的路径,我不会得到 Event.COMPLETE 而是其他一些事件,并且不应执行 getBaseURL。
这是 FireFox 中的正确行为。在 IE 中,看起来 load() 方法实际上并没有调用服务器,它直接跳转到 Event.COMPLETE 的 getBaseURL()。在分配新的 URLLoader 之前,我检查了 _loader 上的 willTrigger() 和 hasEventListener(),事实证明该事件已被很好地删除。
我希望我说得通,我简化了我的代码。快速总结一下:在 FireFox 中它运行良好,但在 IE 中,第一次调用会起作用,但第二次调用不会真正调用 .load() 方法;似乎它使用了第一次调用中先前存储的结果。
希望有人能帮帮我,谢谢
鲁迪