2

我的事件监听器与 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() 方法;似乎它使用了第一次调用中先前存储的结果。

希望有人能帮帮我,谢谢

鲁迪

4

2 回答 2

1

可能请求已被缓存。

var hdr:URLRequestHeader = new URLRequestHeader("pragma", "no-cache");
....
request.requestHeaders.push(hdr);
于 2010-06-08T18:54:44.170 回答
1

尝试将随机变量添加到 url 以防止缓存。

var url:String = getPath();
//if path already contains some variables, replace ? with &
url += "?random=" + Math.random(); 
request.url = getPath();
于 2010-06-09T04:30:19.343 回答