异步上传,兼容性IE6到10,FF,GOOGLE
2014-12-24 11:47
375 查看
本地测试正常,但把项目上传到服务器,出现两个问题,
一,上传文件读取的绝对路径不正确(本地不管在那个盘弹框提示都是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可以在文件上传的同时传递多个台数。
找到以下代码:
[javascript] view
plaincopy
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);
增加自己要传递的参数:
[javascript] view
plaincopy
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);
这里我们增加了五个传递参数。 s.tag_name, s.tag_link, s.tag_sort, s.tag_status, s.tag_id
接着找到:
[javascript] view
plaincopy
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;
},
注意注释中的内容为增加了内容。
修改完后,如何使用?
[javascript] view
plaincopy
$.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){}
//以下省略
一,上传文件读取的绝对路径不正确(本地不管在那个盘弹框提示都是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可以在文件上传的同时传递多个台数。
找到以下代码:
[javascript] view
plaincopy
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);
增加自己要传递的参数:
[javascript] view
plaincopy
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);
这里我们增加了五个传递参数。 s.tag_name, s.tag_link, s.tag_sort, s.tag_status, s.tag_id
接着找到:
[javascript] view
plaincopy
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;
},
注意注释中的内容为增加了内容。
修改完后,如何使用?
[javascript] view
plaincopy
$.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、ie7、ie8 和FF的本地上传图片预览,并客户端判断文件大小和文件格式
- DIV CSS设计时IE6、IE7、FF 与兼容性有关的特性
- javascript:google 向上向下滚动特效,兼容IE6,7,8,FF
- DIV+CSS设计时IE6、IE7、FF 与兼容性有关的特性
- DIV CSS设计时IE6、IE7、FF 与兼容性有关的特性
- DIV CSS设计时IE6、IE7、FF 与兼容性有关的特性
- DIV+CSS设计时IE6、IE7、FF 与兼容性有关的特性
- 兼容ie6、ie7、ie8 和FF的本地上传图片预览,并客户端判断文件大小和文件格式
- IE6、IE7、FF与兼容性有关的特性
- DIV CSS设计时IE6、IE7、FF 与兼容性有关的特性
- 【转】 解决IE5/IE5.5/IE6/FF的兼容性问题
- ff,ie6,ie7,ie8上传图片预览
- IE6和IE7、FF兼容性问题
- ajaxFileUpload.js 无刷新上传图片,支持多个参数同时上传,支持 ie6-ie10
- IE5 IE6~IE9 FF 之间盒子宽度兼容性写法
- CSS的IE6、IE7、FF兼容性写法
- css兼容性小结(1) FF IE6 IE7 IE8
- 10要点解决IE6兼容性问题
- DIV CSS设计时IE6、IE7、FF 兼容性