IE8とFirefox6.0で発生する問題がありますが、Chrome17.0.9では発生しません。以下にfrmMainを投稿すると、テストページに送信されます。テストページには、。を含む単純なJSON文字列が返されますContentType: application/json; charset=utf-8
。問題は、IEとFFが、サーバーから返されたJSONを保存するように要求し、jqueryコードのsuccessメソッドにヒットしないことです。しかし不思議なことに、投稿されたフォームでを省略した場合<input name='File_1' type='file' />
、IEとFFはJSONを保存するように要求せず、jqueryの成功コードが起動します。
したがって、投稿されたコンテンツは、ブラウザが返されたペイロードにどのように反応するかに関係しているようです(IEおよびFF)。Fiddlerを通じて、いずれの場合も返されるペイロードがまったく同じであることを確認しました。
何か案は?
解決策が見つかりました:以下の私の答えを参照してください。私が収集できるものから、「text / html」は、jquery / ajax/jsonを実行するときに返すのに最適なクロスブラウザーコンテンツタイプです。
コード
<script>
$(function () {
$('#btnSave').click(function () {
$('#frmMain').ajaxSubmit({
success: function (data, statusText, xhr, $form) {
alert('test success');
},
fail: function (data, statusText, xhr, $form) {
alert('test fail');
}
});
});
});
</script>
<body>
<form id='frmMain' action='/test' method='post'>
<!--Omit the file input below to make it work-->
file: <input name='File_1' type='file' /><br />
name: <input name='json' value='{"id":5}' /><br />
<input type='button' id='btnSave' value='Save' />
</form>
</body>
ファイルのアップロードで呼び出されました(失敗の原因):
ファイルのアップロードなしで呼び出されます(動作します):
IEのように見える失敗:
FFのように見える失敗: