簡単なファイルアップロードページを作成しました。シンプルにするために、iFrame を使用してファイル入力を含めることは控えました。したがって、フォームが送信されるため、ファイルの送信によってページのリロードがトリガーされます。これは、アップロードされたファイル名をページに表示するために必要です。ファイル名は、jQuery の AJAX 呼び出しを介して取得されます。
Chrome、Firefox、Opera、Mac および Windows の Safari ですべてが魅力的に動作します (Linux はテストしていませんが、動作すると思います)。
私の問題は、IE9 でブラウザーを開くと、ajax 呼び出しが行われ、データが表示されることです。ただし、ファイルがアップロードされると、これは機能しなくなります。
確認するために、サーバーをデバッグ モードで起動し、サービス メソッドにブレーク ポイントを設定しました。ファイルがアップロードされていない限り、ブレークポイントに到達します。
ファイルがアップロードされると (ちなみに、これは機能します)、ブレークポイントには到達しなくなります。IE9 はサービス メソッドを呼び出さず、データは変更されません。別のページ (google.com) に移動し、URL を書き込んでそのページを再度読み込んでも役に立ちません。
これは、私がこれまでブラウザーで見た中で最も奇妙な動作です。フォームが送信され、ファイルが送信されますが、その後の ajax 呼び出しは実行されず、ページは変更されません。しかし、JavaScript は、AJAX 呼び出しが行われたかのように動作します。サーバーが関与しなくなっただけです。
これは次の形式です。
<form method="post" action="${pageContext.request.contextPath}/services/prepop/upload/csv"
id="fileUploadForm" enctype="multipart/form-data">
<div class="file-upload">
<input id="uploadedFile"
type="file"
name="uploadedFile"
onchange="submit()"/>
</div>
<input type="hidden" name="formId" value='{{formId}}'/>
<input type="hidden" name="contentId" value='{{id}}'/>
<input type="hidden" name="page" value='upload'/>
</form>
これはajax呼び出しです
app.log( "getting the form files" );
$.ajax( {
url:"${pageContext.request.contextPath}/services/jsonrest/prepop/list",
type:"GET",
async:true,
data:[
{name:"formId", value:formId}
],
success:function ( prepopContentList ) {
app.log( "the content file list was fetched with " + prepopContentList.length + " entries" );
upload.populateEntryList( prepopContentList, $( "#fileUploadList" ) );
}
} );
最も奇妙なことは、ログ エントリがログに表示されますが、常に同じ値であるということです。デバッグモードでコンテンツを見ると、これが確認されます。配列は常に同じです。
コメットが有効になっていません。普通のjQueryアプリです。
誰かが手がかりを持っているなら。