我刚刚遇到了同样的问题,我认为这是由于 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)
希望这有帮助!