1

Firefoxに非常に特有の問題があり、その理由を見つけることができませんでした。基本的に、AJAXを使用してPHP APIにデータを送信するシステムがありますが、ファイルのアップロードを使用すると、XMLHttpRequest()は使用されず、代わりにフォームの送信にフォールバックします。

これが起こることです:

  • ファイルのアップロードがリクエストされました
  • Javascriptは、アップロードに使用されるフォームを見つけて、それを変数apiSubmitFormに割り当てます。
  • 非表示のiFrameは、内部のDOM appendChild()メソッドを使用してランダムIDで作成され、変数hiddenWindowに割り当てられます。
  • apiSubmitFormメソッドがPOSTに変更され、アクションがAPI URLに変更され、enctypeが'multipart / form-data'に変更され、ターゲットがhiddenWindowのIDに変更されます
  • hiddenWindowにはonload()メソッドが設定されます。これには、apiSubmitForm値を最初の値にリセットし、onload()の最後に作成されたhiddenWindowを削除することが含まれます。

これで、すべてが機能します。JavaScriptエラーはありません。データが送信され、実際に問題なく連続して何度もデータを送信できます。

しかし、Firefoxの緑色で回転するローディングホイールはそのままです。onloadイベントの後でそれ自体を閉じるためにも呼び出されると思いますが、hiddenWindowが最後に削除されるため、機能しませんか?

iFrameのonloadイベントからこの行をコメントアウトした場合、これは発生しません。

apiSubmitForm.removeChild(hiddenWindow);

私がテストした他のすべてのブラウザー(Chrome、Opera、Safari、Internet Explorer)では、そのローディングホイールは実行されません。また、すべてのブラウザ(Firefoxを含む)は正しく機能し、フォームは適切に送信され、コードの他のすべての部分は期待どおりに機能します。

ウィンドウをよりよく閉じるために私にできることはありますか?apiSubmitForm.submit()の直後にそのメソッドを呼び出すことはできません。これは、そのフォームの送信が「非同期」であり、読み込みが中断されるためです。

ありがとう!

4

1 に答える 1

0

まあ、これは私が得た最も近いものですが、それは完全なハックです:

setTimeout(function(){apiSubmitForm.removeChild(hiddenWindow);},1);

(これをiFrame onloadイベントに配置します)

于 2012-04-13T18:32:36.750 に答える