异步上传,兼容性IE6到10,FF,GOOGLE
来源:互联网 发布:软件平台使用协议 编辑:程序博客网 时间:2024/05/24 06:16
本地测试正常,但把项目上传到服务器,出现两个问题,
一,上传文件读取的绝对路径不正确(本地不管在那个盘弹框提示都是C盘的,可能是临时生成文件路径,暂时无法解答)
二,调用Google 页面调试,提示Uncaught TypeError: undefined is not a function 错误, 也就是ajaxfileupload.js文件没有被加载,后来查资料,发现是浏览器兼容问题,特把js里面代码做如下修改
1.上传过程中 会出现缺少函数 handleError,只需要在ajaxfileupload.js末尾添加函数如下:
这个是因为在jQuery1.4版本以上删除了handleError这个方法,在js最后加上就行了
handleError: function( s, xhr, status, e ) {
if ( s.error ) {
s.error.call( s.context || window, xhr, status, e );
}
if ( s.global ) {
(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
}
}
2.在上传过程中,FF和GOOGLE chrome都能上传成功,但GOOGLE中不执行回调函数,
ajaxfileupload.js中查找 if ( type == "JSON" ){
eval("data = \" "+data+" \" ");3.IE浏览器中,IE8可以正常上传,但IE9和IE10都无法上传,这是由于IE浏览器的版本升级问题。修改方法如下:
查找
if(window.ActiveXObject) {
var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
if(typeof uri== 'boolean'){
io.src = 'javascript:false';
}
else if(typeof uri== 'string'){
io.src = uri;
}
}
修改成
if(window.ActiveXObject) {
if(jQuery.browser.version=="9.0" || jQuery.browser.version=="10.0"){
var io = document.createElement('iframe');
io.id = frameId;
io.name = frameId;
}else if(jQuery.browser.version=="6.0" || jQuery.browser.version=="7.0" || jQuery.browser.version=="8.0"){
var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
if(typeof uri== 'boolean'){
io.src = 'javascript:false';
}
else if(typeof uri== 'string'){
io.src = uri;
}
}
}
以上基本可以解决浏览器兼容问题,以下做拓展,
如何让ajaxfileupload.js可以在文件上传的同时传递多个台数。
找到以下代码:
- ajaxFileUpload: function(s) {
- // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
- s = jQuery.extend({}, jQuery.ajaxSettings, s);
- var id = new Date().getTime()
- var form = jQuery.createUploadForm(id, s.fileElementId);
增加自己要传递的参数:
这里我们增加了五个传递参数。 s.tag_name, s.tag_link, s.tag_sort, s.tag_status, s.tag_id- ajaxFileUpload: function(s) {
- // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
- s = jQuery.extend({}, jQuery.ajaxSettings, s);
- var id = new Date().getTime()
- var form = jQuery.createUploadForm(id, s.fileElementId, s.tag_name, s.tag_link, s.tag_sort, s.tag_status, s.tag_id);
接着找到:
注意注释中的内容为增加了内容。- createUploadForm: function(id, fileElementId, tag_name, tag_link, tag_sort, tag_status, tag_id)//增加tag_name, tag_link, tag_sort, tag_status, tag_id
- {
- //create form
- var formId = 'jUploadForm' + id;
- var fileId = 'jUploadFile' + id;
- //--增加以下内容
- var tagNameId = 'tag_name' + id;
- var tagLinkId = 'tag_link' + id;
- var tagSortId = 'tag_sort' + id;
- var tagStatusId = 'tag_status' + id;
- var tagIdId = 'tag_id' + id;
- //--end
- var form = $('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');
- var oldElement = $('#' + fileElementId);
- var newElement = $(oldElement).clone();
- //--增加以下内容
- var tagNameElement = '<input type="text" name="tag_name" value="'+tag_name+'">';
- var tagLinkElement = '<input type="text" name="tag_link" value="'+tag_link+'">';
- var tagSortElement = '<input type="text" name="tag_sort" value="'+tag_sort+'">';
- var tagStatusElement = '<input type="text" name="tag_status" value="'+tag_status+'">';
- var tagIdElement = '<input type="text" name="tag_id" value="'+tag_id+'">';
- //--end
- $(oldElement).attr('id', fileId);
- $(oldElement).before(newElement);
- $(oldElement).appendTo(form);
- //--增加以下的内容
- $(tagNameElement).appendTo(form);
- $(tagLinkElement).appendTo(form);
- $(tagSortElement).appendTo(form);
- $(tagStatusElement).appendTo(form);
- $(tagIdElement).appendTo(form);
- //--end
- //set attributes
- $(form).css('position', 'absolute');
- $(form).css('top', '-1200px');
- $(form).css('left', '-1200px');
- $(form).appendTo('body');
- return form;
- },
修改完后,如何使用?
- $.ajaxFileUpload({
- url:web_url,
- secureuri:false,
- //以下为增加的传递参数
- tag_name:tag_name,
- tag_link:tag_link,
- tag_sort:tag_sort,
- tag_status:tag_status,
- tag_id:tag_id,
- //--end
- fileElementId:result[0],
- dataType: 'json',
- success: function (data,status){}
- //以下省略
- 异步上传,兼容性IE6到10,FF,GOOGLE
- IE6、IE7、FF 兼容性
- FF,ie6,ie7兼容性
- CSS IE6,IE7,FF兼容性
- [css]IE5/IE5.5/IE6/FF兼容性
- IE6 IE7 IE8 FF 兼容性的写法
- 最近项目中用到的图片上传前预览功能,兼容IE6-9,FF
- IE6 FF 下操作 iframe 兼容性問題
- 对IE6、IE7、FF兼容性的详细CSS HACK介绍
- IE6、IE7、FF与兼容性有关的特性
- CSS IE6、IE7、FF兼容性的详细CSS HACK
- DIV CSS设计时IE6、IE7、FF 兼容性
- css兼容性小结(1) FF IE6 IE7 IE8
- IE5 IE6~IE9 FF 之间盒子宽度兼容性写法
- IE6、IE7、FF 与兼容性有关的特性
- ff,ie6,ie7,ie8上传图片预览
- CSS HACK : IE6 FF google 等浏览器 hack方法收集
- margin如何在FF/IE6/IE7/IE8/Google兼容浏览器
- bitbucket使用
- Codeforces Round #283 (Div. 2) A B
- 300 方程式
- Activity之生命周期与配置
- 黑马程序员-oc中分类的使用
- 异步上传,兼容性IE6到10,FF,GOOGLE
- windows下安装redis
- NSPredicate
- wamp升级php5.3.3到5.4.36版本
- 实现两个超大无符号整数的加法
- iOS 之位置信息管理
- C#实现AES加解密方法
- java实现类linux shell效果
- 黑马程序员-oc中内存管理的相关知识