jquery文件上传-IE完成回调data.result问题

2023-12-19

我在用着jQuery file 上传插件 https://github.com/blueimp/jQuery-File-Upload.

我不使用UI部分,只是基础部分。

当我执行以下操作时,我遇到了问题IE:

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

on IE the data.result is an Object (IE9至少,不确定其他人......)

On Chrome/Firefox只是回应Text(来自服务器的简单纯文本)。

Ideas?


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

由于 Safari 5+、Firefox 4+ 和 Chrome 支持 XHR 文件上传,因此 fileupload 插件可以真正异步传输文件,从而允许来自服务器的纯文本响应。此纯文本响应可通过data.result in the done事件处理程序,并且可以轻松使用。

然而,在 IE 中,文件传输是通过隐藏 iframe 中的整页刷新进行的,从而导致data.result in the done处理程序是一个完整的document对象,响应文本包裹在深处<html><body><iframe><pre> tags.

这不仅使在 IE 中获取数据变得很痛苦,而且使不同浏览器获取数据的方式也不同。

我的解决方案:

我设置了forceIframeTransport选项为 true,这使得所有浏览器都使用隐藏的 iframe 传输文件,例如 IE。遗憾的是错过了 XHR 文件上传,但这至少在所有浏览器中为我们提供了相同类型的响应。然后,在我的done处理程序,我从document像这样的对象:

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 https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support(请参阅底部的“XMLHttpRequest”部分)https://github.com/blueimp/jQuery-File-Upload/wiki/Options https://github.com/blueimp/jQuery-File-Upload/wiki/Options(参见“forceIframeTransport”大约向下 1/3)

希望这有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jquery文件上传-IE完成回调data.result问题 的相关文章

随机推荐