我不使用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上只是响应文本(来自服务器的简单纯文本)。
想法?
解决方法
由于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的下降)
希望这有助于!