CLo*_*Lod 30 jquery plugins internet-explorer file-upload
我正在使用jQuery
文件上传插件.
我不使用该UI
部分,只使用基本部分.
当我执行以下操作时,我遇到了以下问题IE
:
$('input#fileupload').fileupload({
url: '/upload',
done: function (e, data) {
if(data.result != null && $.trim(data.result) != '')
$('a#attachment').html(data.result);
}
//......................
Run Code Online (Sandbox Code Playgroud)
上IE
的data.result
是Object
(IE9
至少,不知道其他人......)
On Chrome
/ Firefox
只是响应Text
(来自服务器的简单纯文本).
想法?
Jus*_*tin 50
我刚遇到同样的问题,我认为这是因为IE(甚至9)不支持XHR文件上传.以下是我认为正在发生的事情以及我的解决方案:
由于Safari 5 +,Firefox 4+和Chrome支持XHR文件上传,因此fileupload插件可以异步传输文件,从而允许来自服务器的纯文本响应.这个纯文本响应是经由提供data.result
在done
事件处理程序,并且可以容易地使用.
在IE中,然而,文件传输通过一个隐藏的iframe刷新整个页面出现,导致data.result
在done
处理程序是一个完整的document
对象,具有响应文本包裹内心深处<html><body><iframe><pre>
的标签.
这不仅使得在IE中获取数据变得很痛苦,而且它使您获得浏览器之间不同数据的方式.
我的解决方案
我将forceIframeTransport
选项设置为true,这使得所有浏览器都使用隐藏的iframe传输文件,例如IE.遗憾的是错过了XHR文件上传,但至少在所有浏览器中都给出了相同的响应.然后,在我的done
处理程序中,我从document
对象中提取结果,如下所示:
var result = $( 'pre', data.result ).text();
Run Code Online (Sandbox Code Playgroud)
在你的情况下,我认为代码看起来像这样:
$('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 );
}
...
Run Code Online (Sandbox Code Playgroud)
此处还需要注意的是,我服务器的响应的内容类型是"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)
希望这有帮助!
小智 5
实际上这就是jquery.iframe-transport.js
它的用途(基本版本还包括这个插件作为附加参考).你需要的是将dataType
属性设置为json
,jquery.iframe-transport
插件将自动解析iframe
结果,因此你可以在done处理程序中使用相同的逻辑.
$('#fileupload').fileupload({
...
dataType: 'json'
...
});
Run Code Online (Sandbox Code Playgroud)