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

时间:2012-04-06 14:37:34

标签: jquery json internet-explorer firefox multipartform-data

我遇到的问题出现在IE 8和Firefox 6.0中,但不是Chrome 17.0.9。当我在下面发布frmMain时,我将它发送到一个测试页面,该页面只返回一个带有ContentType: application/json; charset=utf-8的简单JSON字符串。问题是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>

收到文件上传(原因失败): enter image description here

没有文件上传(工作): enter image description here

在IE中看起来像什么失败: enter image description here

FF中的失败情况如何: enter image description here

2 个答案:

答案 0 :(得分:2)

经过TON的反复试验后,我跑过this SO post,其中@ItsJason建议将服务器的ContentType设置为“text / html”。这解决了问题,我的jQuery代码在调用我的回调方法时仍然将返回的有效负载识别为JSON。经验教训:在ajax回发期间将JSON返回到jquery时,为了实现全面的跨浏览器兼容性,请不要使用“application / json”,请使用“text / html”!!

答案 1 :(得分:0)

您可能需要指定数据的返回类型是json。

看起来您正在使用插件。无论如何,这里有一些关于指定返回数据类型的信息: http://jquery.malsup.com/form/#options-object