IE尝试在提交包含文件的jQuery多部分表单数据时下载json响应

sni*_*tko 39 ajax internet-explorer json multipartform-data jqueryform

我试图file通过jQuery.Form插件提交一个带有字段的表单,这里是代码:

$('form').ajaxSubmit({
  url: "/path",
  dataType: "json",
  contentType: "multipart/form-data"
...
Run Code Online (Sandbox Code Playgroud)

然后服务器返回json作为响应.在除IE之外的所有浏览器中都很好用,它试图将响应下载为文件.如果我从表单中删除文件字段,它也可以正常工作.

我在这里和谷歌已经看到了各种解决方案,基本上几乎尝试了所有描述的内容,包括enctype通过jQuery 设置表单,但它没有用.

任何建议都会受到欢迎.

Dmi*_*rii 21

您可以简单地从控制器返回JSON作为"text/html",然后使用JQuery.parseJSON()在客户端解析它.

控制器:

    return this.Json(
            new
                {
                    prop1 = 5,
                    prop2 = 10
                }, 
            "text/html");
Run Code Online (Sandbox Code Playgroud)

客户端:

jsonResponse = $.parseJSON(response);

if(jsonResponse.prop1==5) {
     ...
}
Run Code Online (Sandbox Code Playgroud)

这个解决方案一直在为我工作.

  • 这对我也很有用,但是我必须在IE的服务端更改此调用似乎很荒谬. (2认同)

sni*_*tko 10

我还没有找到直接的解决方案,但我最终实现了以下解决方法:dataType: "text"在我的ajax设置中使用,然后从控制器返回明文,;在客户端分离值并解析它们.这样IE和Forefox就不再试图下载响应了.

我没有找到任何其他方法来阻止所述行为,然后返回明文.我尝试将JSON作为纯文本返回,然后使用$ .parseJSON进行解析,但由于某些js错误,它无法正常工作.

  • 我的解决方法有点不同.我必须将resposne中的标题也设置为text/html.因为`dataType:'text'`ie8/ie9它也想下载文件. (3认同)
  • 将标题设置为text/plain for IE 8/9并保留dataType:'json'.在这些情况下,IE 8/9不会出错并且jquery会正确解析您的数据. (2认同)

小智 6

只需使用'Content-Type', 'text/html'标题发送响应.