jquery文件上传 – IE做回调data.result问题

前端之家收集整理的这篇文章主要介绍了jquery文件上传 – IE做回调data.result问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用jQuery文件 upload plugin

我不使用UI部分,只有基本的一部分。

当我做以下,我有一个问题在IE:

$('input#fileupload').fileupload({
    url: '/upload',done: function (e,data) {
    if(data.result != null && $.trim(data.result) != '')
        $('a#attachment').html(data.result);
    }
    //......................

在IE上的data.result是一个对象(IE9至少,不确定其他…)

在Chrome / Firefox上只是响应文本(来自服务器的简单纯文本)。

想法?

解决方法

我刚刚遇到同样的问题,我认为这是由于事实,XHR文件上传不支持在IE(甚至9)。这里是我相信发生了,我的解决方案:

由于Safari 5,Firefox 4和Chrome支持XHR文件上传,fileupload插件可以真正异步传输文件,允许从服务器进行纯文本响应。这个纯文本响应可以通过done事件处理程序中的data.result获得,并且可以很容易地使用。

然而,在IE中,通过在隐藏的iframe中的整个页面刷新发生文件传输,导致done处理程序中的data.result是完整的文档对象,其中响应文本被包含在< html>< html>< ; iframe>< pre>标签

这不仅使得它是一个痛苦,以获得在IE中的数据,它使你得到的数据不同的浏览器之间的方式。

我的解决方案:

我将forceIframeTransport选项设置为true,这使得所有浏览器都使用隐藏的iframe(如IE)传输文件。不幸的是错过了XHR文件上传,但这至少给了我们在所有浏览器中相同的响应。然后,在我的完成处理程序,我从文档对象提取结果像这样:

var result = $( 'pre',data.result ).text();

在你的情况下,我认为代码看起来像这样:

$('input#fileupload').fileupload({
    forceIframeTransport: true,url: '/upload',done: function ( e,data ) {
     var result = $( 'pre',data.result ).text();
     if( result != null && $.trim( result ) != '' )
        $( 'a#attachment' ).html( result );
    }
...

另外要注意的是,我的服务器响应的内容类型是’text / plain’。您可能已经注意到,IE有时会提示用户保存或打开json响应。

这里有几个链接,在解决问题时证明是有用的:
https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support(请参阅底部的“XMLHttpRequest”部分)
https://github.com/blueimp/jQuery-File-Upload/wiki/Options(参见’forceIframeTransport’大约1/3的下降)

希望这有助于!

原文链接:https://www.f2er.com/jquery/184502.html

猜你在找的jQuery相关文章