gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:31:39 26 4
gpt4 key购买 nike

我正在使用 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是一个Object(至少在IE9上,不确定其他的。 ..)

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

想法?

最佳答案

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

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

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

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

希望这有帮助!

关于jquery文件上传-IE完成回调data.result问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8814068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com