异步上传,兼容性IE6到10,FF,GOOGLE

来源:互联网 发布:软件平台使用协议 编辑:程序博客网 时间:2024/05/24 06:16
  1. 本地测试正常,但把项目上传到服务器,出现两个问题,

  2. 一,上传文件读取的绝对路径不正确(本地不管在那个盘弹框提示都是C盘的,可能是临时生成文件路径,暂时无法解答)

  3. 二,调用Google 页面调试,提示Uncaught TypeError: undefined is not a function 错误, 也就是ajaxfileupload.js文件没有被加载,后来查资料,发现是浏览器兼容问题,特把js里面代码做如下修改

  4. 1.上传过程中 会出现缺少函数 handleError,只需要在ajaxfileupload.js末尾添加函数如下:

  5. 这个是因为在jQuery1.4版本以上删除了handleError这个方法,在js最后加上就行了

  6. handleError: function( s, xhr, status, e ) {

  7.         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] );

            }

        }

  8. 2.在上传过程中,FF和GOOGLE chrome都能上传成功,但GOOGLE中不执行回调函数, 

    ajaxfileupload.js中查找  if ( type == "JSON" ){ 

    eval("data = \" "+data+" \" ");

  9. 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;  

            }  

        }  

    }  

  10. 以上基本可以解决浏览器兼容问题,以下做拓展,

  11. 如何让ajaxfileupload.js可以在文件上传的同时传递多个台数。

    找到以下代码:

    [javascript] view plaincopy
    1. ajaxFileUpload: function(s) {  
    2.         // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout          
    3.         s = jQuery.extend({}, jQuery.ajaxSettings, s);  
    4.         var id = new Date().getTime()          
    5.     var form = jQuery.createUploadForm(id, s.fileElementId); 
  12. 增加自己要传递的参数:

    [javascript] view plaincopy
    1. ajaxFileUpload: function(s) {  
    2.         // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout          
    3.         s = jQuery.extend({}, jQuery.ajaxSettings, s);  
    4.         var id = new Date().getTime()          
    5.     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
    1. createUploadForm: function(id, fileElementId, tag_name, tag_link, tag_sort, tag_status, tag_id)//增加tag_name, tag_link, tag_sort, tag_status, tag_id  
    2.     {  
    3.         //create form     
    4.         var formId = 'jUploadForm' + id;  
    5.         var fileId = 'jUploadFile' + id;  
    6.         //--增加以下内容  
    7.         var tagNameId = 'tag_name' + id;  
    8.         var tagLinkId = 'tag_link' + id;  
    9.         var tagSortId = 'tag_sort' + id;  
    10.         var tagStatusId = 'tag_status' + id;  
    11.         var tagIdId = 'tag_id' + id;  
    12.         //--end  
    13.         var form = $('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');   
    14.         var oldElement = $('#' + fileElementId);  
    15.         var newElement = $(oldElement).clone();  
    16.         //--增加以下内容  
    17.         var tagNameElement = '<input type="text" name="tag_name" value="'+tag_name+'">';    
    18.         var tagLinkElement = '<input type="text" name="tag_link" value="'+tag_link+'">';  
    19.         var tagSortElement = '<input type="text" name="tag_sort" value="'+tag_sort+'">';  
    20.         var tagStatusElement = '<input type="text" name="tag_status" value="'+tag_status+'">';  
    21.         var tagIdElement = '<input type="text" name="tag_id" value="'+tag_id+'">';  
    22.         //--end  
    23.         $(oldElement).attr('id', fileId);  
    24.         $(oldElement).before(newElement);  
    25.         $(oldElement).appendTo(form);  
    26.         //--增加以下的内容  
    27.         $(tagNameElement).appendTo(form);  
    28.         $(tagLinkElement).appendTo(form);  
    29.         $(tagSortElement).appendTo(form);  
    30.         $(tagStatusElement).appendTo(form);  
    31.         $(tagIdElement).appendTo(form);  
    32.         //--end  
    33.         //set attributes  
    34.         $(form).css('position''absolute');  
    35.         $(form).css('top''-1200px');  
    36.         $(form).css('left''-1200px');  
    37.         $(form).appendTo('body');         
    38.         return form;  
    39.     },  
    注意注释中的内容为增加了内容。

    修改完后,如何使用?

    [javascript] view plaincopy
    1. $.ajaxFileUpload({  
    2.        url:web_url,  
    3.        secureuri:false,  
    4.        //以下为增加的传递参数  
    5.        tag_name:tag_name,  
    6. tag_link:tag_link,  
    7. tag_sort:tag_sort,  
    8. tag_status:tag_status,  
    9. tag_id:tag_id,  
    10.        //--end  
    11.        fileElementId:result[0],  
    12.        dataType: 'json',  
    13.        success: function (data,status){}  
    14.        //以下省略  

0 0
原创粉丝点击