前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ajaxFileUpload文件

ajaxFileUpload文件

作者头像
Dylan Liu
发布2019-07-01 11:31:56
6370
发布2019-07-01 11:31:56
举报
文章被收录于专栏:dylanliu

从网上下了个ajaxfileupload的文件,结果不支持ie,又出现各种问题,上网查了,修改了可以支持各种浏览器。

把代码贴在下面,以备后用:

代码语言:javascript
复制
jQuery.extend({  
      
  
    createUploadIframe: function(id, uri)  
    {  
            //create frame  
            var frameId = 'jUploadFrame' + id;  
              
            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;  
                // }  
                  
                //fix ie9 and ie 10-------------  
                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;  
                     }  
                }  
            }  
            else {  
                var io = document.createElement('iframe');  
                io.id = frameId;  
                io.name = frameId;  
            }  
            io.style.position = 'absolute';  
            io.style.top = '-1000px';  
            io.style.left = '-1000px';  
  
            document.body.appendChild(io);  
  
            return io             
    },  
    createUploadForm: function(id, fileElementId, 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: 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);  
        var io = jQuery.createUploadIframe(id, s.secureuri);  
        var frameId = 'jUploadFrame' + id;  
        var formId = 'jUploadForm' + id;          
        // Watch for a new set of requests  
        if ( s.global && ! jQuery.active++ )  
        {  
            jQuery.event.trigger( "ajaxStart" );  
        }              
        var requestDone = false;  
        // Create the request object  
        var xml = {}     
        if ( s.global )  
            jQuery.event.trigger("ajaxSend", [xml, s]);  
        // Wait for a response to come back  
        var uploadCallback = function(isTimeout)  
        {             
            var io = document.getElementById(frameId);  
            try   
            {                 
                if(io.contentWindow)  
                {  
                     xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;  
                     xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;  
                       
                }else if(io.contentDocument)  
                {  
                     xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;  
                    xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;  
                }                         
            }catch(e)  
            {  
                jQuery.handleError(s, xml, null, e);  
            }  
            if ( xml || isTimeout == "timeout")   
            {                 
                requestDone = true;  
                var status;  
                try {  
                    status = isTimeout != "timeout" ? "success" : "error";  
                    // Make sure that the request was successful or notmodified  
                    if ( status != "error" )  
                    {  
                        // process the data (runs the xml through httpData regardless of callback)  
                        var data = jQuery.uploadHttpData( xml, s.dataType );      
                        // If a local callback was specified, fire it and pass it the data  
                        if ( s.success )  
                            s.success( data, status );  
      
                        // Fire the global callback  
                        if( s.global )  
                            jQuery.event.trigger( "ajaxSuccess", [xml, s] );  
                    } else  
                        jQuery.handleError(s, xml, status);  
                } catch(e)   
                {  
                    status = "error";  
                    jQuery.handleError(s, xml, status, e);  
                }  
  
                // The request was completed  
                if( s.global )  
                    jQuery.event.trigger( "ajaxComplete", [xml, s] );  
  
                // Handle the global AJAX counter  
                if ( s.global && ! --jQuery.active )  
                    jQuery.event.trigger( "ajaxStop" );  
  
                // Process result  
                if ( s.complete )  
                    s.complete(xml, status);  
  
                jQuery(io).unbind()  
  
                setTimeout(function()  
                                    {   try   
                                        {  
                                            $(io).remove();  
                                            $(form).remove();     
                                              
                                        } catch(e)   
                                        {  
                                            jQuery.handleError(s, xml, null, e);  
                                        }                                     
  
                                    }, 100)  
  
                xml = null  
  
            }  
        }  
        // Timeout checker  
        if ( s.timeout > 0 )   
        {  
            setTimeout(function(){  
                // Check to see if the request is still happening  
                if( !requestDone ) uploadCallback( "timeout" );  
            }, s.timeout);  
        }  
        try   
        {  
           // var io = $('#' + frameId);  
            var form = $('#' + formId);  
            $(form).attr('action', s.url);  
            $(form).attr('method', 'POST');  
            $(form).attr('target', frameId);  
            if(form.encoding)  
            {  
                form.encoding = 'multipart/form-data';                
            }  
            else  
            {                 
                form.enctype = 'multipart/form-data';  
            }             
            $(form).submit();  
  
        } catch(e)   
        {             
            jQuery.handleError(s, xml, null, e);  
        }  
        if(window.attachEvent){  
            document.getElementById(frameId).attachEvent('onload', uploadCallback);  
        }  
        else{  
            document.getElementById(frameId).addEventListener('load', uploadCallback, false);  
        }         
        return {abort: function () {}};   
  
    },  
    handleError: function( s, xhr, status, e ) {
        // If a local callback was specified, fire it
        if ( s.error ) {
            s.error.call( s.context || window, xhr, status, e );
        }

        // Fire the global callback
        if ( s.global ) {
            (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
        }
    },
    uploadHttpData: function( r, type ) {  
        var data = !type;  
        data = type == "xml" || data ? r.responseXML : r.responseText;  
        // If the type is "script", eval it in global context  
        if ( type == "script" )  
            jQuery.globalEval( data );  
        // Get the JavaScript object, if JSON is used.  
        if ( type == "json" )  {
        	  data = r.responseText;  
        	  var start = data.indexOf(">");  
        	  if(start != -1) {  
        		  var end = data.indexOf("<", start + 1);  
        		  if(end != -1) {  
        			  data = data.substring(start + 1, end);  
        		  }  
        	  } 
            eval( "data = " + data ); 
        }
        // evaluate scripts within html  
        if ( type == "html" )  
            jQuery("<div>").html(data).evalScripts();  
            //alert($('param', data).each(function(){alert($(this).attr('value'));}));  
        return data;  
    }  
})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档