6

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のように見える失敗: ここに画像の説明を入力してください

4

2 に答える 2

2

試行錯誤の末、@ItsJasonがサーバーのContentTypeを"text/html"に設定することを推奨するこのSO投稿に出くわしました。これで問題は解決し、jQueryコードは、コールバックメソッドを呼び出したときに、返されたペイロードをJSONとして認識していました。学んだ教訓:ajaxポストバック中にJSONをjqueryに返すときの完全なクロスブラウザー互換性のために、「application / json」を使用せず、「text/html」を使用してください!!

于 2012-04-07T04:47:12.370 に答える
0

データの戻りタイプがjsonであることを指定する必要がある場合があります。

プラグインを使用しているようです。とにかく、ここに戻りデータ型の指定に関する情報があります:http: //jquery.malsup.com/form/#options-object

于 2012-04-06T15:21:02.427 に答える