读书人

ajaxSubmit作文件上传为什么在IE中进度

发布时间: 2013-04-26 16:27:53 作者: rapoo

ajaxSubmit做文件上传为什么在IE中进度条无反应?急!
最近做的一个项目要文件上传,我子啊火狐中测试一切正常,在谷歌浏览器也正常,怎么到了IE那进度条就不走了呢?研究发现是IE中uploadProgress没有执行,具体代码如下

  var options = {
beforeSend: function() {
progress.show();
var percentVal = '0%';
bar.css('width',percentVal)
percent.html(percentVal);
status.html('上传中……')
},
uploadProgress: function(event, position, total, percentComplete) {
alert('怎么就IE不执行这里呢?郁闷')
var percentVal = percentComplete + '%';
bar.width(percentVal)
percent.html(percentVal);
//console.log(percentVal, position, total);
},
dataType:'json',
error:function(data){
status.html("上传失败");
bar.width('0')
},
success: function(data) {
status.html('上传成功')
bar.width('100%')
} };
// 将options传给ajaxSubmit
$('#formbook').ajaxSubmit(options);

这里beforeSend、dataType、error、success都是有效的,怎么就uploadProgress不会执行呢?仔细去jquery.form.js里研究了一天源码,也没有个结果,请各位高手指教,非常感谢了!!!
(以下可疑不看)
在源码里发现一个问题,不知道IE为什么会进这里:也就是为什么执行这里if里面
这面是这段可疑的源码:

var s = $.extend(true, {}, $.ajaxSettings, options, {
contentType: false,
processData: false,
cache: false,
type: method || 'POST'
});
[color=#FF0000]if (options.iframe !== false && (options.iframe || shouldUseFrame)) {
// hack to fix Safari hang (thanks to Tim Molendijk for this)
// see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
if (options.closeKeepAlive) {
$.get(options.closeKeepAlive, function() {
jqxhr = fileUploadIframe(a);
});
}
else {
//IE执行这里
jqxhr = fileUploadIframe(a);
}


}
else if ((hasFileInputs || multipart) && fileAPI) {
//火狐和谷歌执行这里
jqxhr = fileUploadXhr(a);
}
else {
jqxhr = $.ajax(options);
}

[/color] ie 浏览器 ajaxSubmit 进度条 uploadProgress
[解决办法]
ie浏览器不支持formdata对象,所以上传文件需要iframe来模拟,firefox,chrome支持formdata对象,所以不需要iframe

参考:html5 ajax上传文件asp.net示例

IE调用fileUploadIframe方法上传文件,这个方法没有调用uploadProgress。
[解决办法]
表单中包含了文件IE就会调用iframe,因为ajax再ie下无法上传文件,因为没有formdata对象可以添加文件数据。

beforeSend中显示一张loading.gif图片,complete中隐藏就行了

[解决办法]
本帖最后由 showbo 于 2013-03-22 10:47:55 编辑 IE无解,不支持,Progress是html5 xhr对象的新属性,不知道IE10支持formdata没有。。

uploadify应该是兼容性最好的了,flash实现,不过臭屁的ios不支持。。

折中的办法就是判断是否ie,是ie就用uploadify,其他浏览器用jquery.form.js

XMLHttpRequest Level 2新特性介绍
[解决办法]
腾讯是acx。基本ie能返回进度的不是acx就是flash,要么你自己写个软件给客户上传用

读书人网 >Ajax

热点推荐