您的位置:首页 > 编程语言 > Go语言

异步上传,兼容性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){}  

       //以下省略  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息