我有一个问题发生在 IE 8 和 Firefox 6.0 中,但不是 Chrome 17.0.9。当我在下面发布 frmMain 时,我将它发送到一个测试页面,该页面只返回一个简单的 JSON 字符串,带有ContentType: application/json; charset=utf-8
. 问题是 IE 和 FF 会提示我保存从服务器返回的 JSON,而不是在我的 jquery 代码中点击成功方法。<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 中的失败情况: