2

URLLoader での eventListeners に問題がありますが、この問題は 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);
}

問題は、コードを少なくとも 1 回実行した後に getBaseURL が自動的に実行されることですが、これは IE の場合のみです。何が起こるかというと、getUploadURL を呼び出すと、サーバーが Event.COMPLETE になるイベントを送信することを確認するため、getBaseURL が実行され、リスナーが削除されます。getUploadURL メソッドを呼び出して間違ったパスを入力すると、Event.COMPLETE は取得されず、他のイベントが取得され、getBaseURL は実行されません。

これが FireFox の正しい動作です。IE では、load() メソッドは実際にはサーバーを呼び出さず、Event.COMPLETE の getBaseURL() に直接ジャンプするように見えます。新しい URLLoader を割り当てる前に、_loader の willTrigger() と hasEventListener() を確認したところ、イベントが適切に削除されていることがわかりました。

意味があるといいのですが、コードを単純化しました。簡単にまとめると、FireFox では問題なく動作しますが、IE では最初の呼び出しは機能しますが、2 番目の呼び出しは実際には .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 に答える