多部分表单POST导致Firefox提示JSON保存

sis*_*dog 6 firefox jquery internet-explorer json multipartform-data

我有一个问题发生在IE 8和Firefox 6.0但不是Chrome 17.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>
Run Code Online (Sandbox Code Playgroud)

与文件上传(CAUSES FAIL): 在此输入图像描述

呼吁没有文件上传(工作): 在此输入图像描述

IE中失败的情况如下: 在此输入图像描述

FF中的失败情况如下: 在此输入图像描述

sis*_*dog 2

经过大量的试验和错误后,我遇到了这篇 SO 帖子,其中 @ItsJason 建议将服务器的 ContentType 设置为“text/html”。这解决了问题,并且当我的 jQuery 代码调用我的回调方法时,它仍然将返回的有效负载识别为 JSON。所以吸取的教训是:为了在 ajax 回发期间将 JSON 返回到 jquery 时的完全跨浏览器兼容性,不要使用“application/json”,而使用“text/html”!