小编Str*_*nja的帖子

IE iframe无法正确处理application/json响应

我目前正在使用ASP.NET Web API将ASP.NET MVC网站的某些部分升级为更加RESTful.我们正在转向更RESTful设计的功能之一是文件上传.对于客户端,我们使用jquery插件ajaxForm来包装iframe的创建,iframe将提交包含文件输入元素的表单.这对ASP.NET MVC很有用.

当更改它以使用我们的Web API端点(它返回Content-Type为"application/json"的响应)时,我们注意到Internet Explorer 9的问题.似乎从未调用过ajaxForm成功函数.据我所知,似乎IE中的iframe将Content-Type为"application/json"的响应正文解释为要下载的文件附件.这意味着它永远不会触发iframe的"已加载"事件,这意味着永远不会触发ajaxForm onload事件处理程序,并且永远不会调用我们的ajaxForm成功函数.

我们也注意到了IE 7中的问题,但是我们无法在最新版本的Firefox或Chrome中重新创建该问题,即使强迫他们使用iframe而不是使用FormData的File API.

为了解决此问题,我现在强制将响应Content-Type返回到"text/plain",这是我们之前从处理文件上载的ASP.NET MVC控制器操作返回的内容.这使一切都恢复了.

我的问题:

  • 有没有办法可以将Web API响应Content-Type保持为"application/json"并让IE正确解释它?
  • 使用IE和Web API时是否有更好的文件上传方式?也许是一个不同的插件或更好的技术?

附加限制:我不能在本网站上使用ActiveX或Flash.我可以使用不同的插件,但前提是它具有一般的跨浏览器支持.(IE,Chrome,Firefox,Safari等)

我的HTML:

<form id="uploadFormId" action="" method="post" enctype="multipart/form-data" encoding="multipart/form-data">
    <input type="file" name="files[]"/>
</form>
Run Code Online (Sandbox Code Playgroud)

我的javascript:

function onFileChange( e ) {
    if ( e.type === e.originalEvent.type ) {
        var filePath = $( e.currentTarget ).val();
        if ( filePath !== '' ) {
            $( this ).closest( 'form' ).submit();
        }
    }
};

$( function() {
    $( '#uploadFormId' ).ajaxForm( {
        url: "api/Files/1234",
        dataType: 'json',
        success: …
Run Code Online (Sandbox Code Playgroud)

javascript iframe internet-explorer json ajaxform

6
推荐指数
1
解决办法
8834
查看次数

标签 统计

ajaxform ×1

iframe ×1

internet-explorer ×1

javascript ×1

json ×1