1. 程式人生 > >ajaxfileupload.js常見問題及解決方法彙總 附修復版原始碼

ajaxfileupload.js常見問題及解決方法彙總 附修復版原始碼

首先說的是這個外掛已經比較老了,但是如果你的專案對上傳要求不那麼高的話,或者僅僅只是作為個人專案裡面使用的話,我感覺還是可以的。

1.這個上傳外掛有一個比較嚴重的缺陷,那就是隻有第一次上傳的時候有效,第一次上傳之後再次上傳其他檔案都無效,那麼為什麼會這樣呢?開啟谷歌console就會看到

點進去看一下發現是缺少這個方法導致的js無法順序執行下面的方法。我們在jQuery.extend裡面加上方法,就會發現這個bug消失了。

handleError: function( s, xhr, status, e ){
    // If a local callback was specified, fire it
if ( s.error ) { s.error.call( s.context || s, xhr, status, e ); } // Fire the global callback if ( s.global ) { (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] ); } }

這個bug的出現原裡是因為該外掛上傳時其實時通過在頁面新建一個form來使用post請求傳圖片到後臺,因為缺少handelError的方法導致執行成功後無法remove掉該form,下次傳圖的時候還是會傳第一次上傳的圖片。我們加入這個方法後該方法順利執行就沒事了。但是一些老版本的jquery裡面是有該方法的,比較的新的jquery沒有這個方法。但是現在基本上都是用的比較新的,所以需要加上該方法,該外掛才能順利使用。

2.在ie的某些版本上該外掛無法使用,主要是裡面的createUploadIframe方法在建立iframe的方法在一些ie版本上不適用,所以我們修改一下該方法即可。

createUploadIframe: function(id, uri)
{
      //create frame
var frameId = 'jUploadFrame' + id;
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; } } } 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 }

最後附上該外掛所有原始碼,方便大家直接複製,就不上傳騙大家積分了。

jQuery.extend({

    handleError: function( s, xhr, status, e ){
        // If a local callback was specified, fire it
if ( s.error ) {
            s.error.call( s.context || s, xhr, status, e );
}

        // Fire the global callback
if ( s.global ) {
            (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
}
    },
createUploadIframe: function(id, uri)
   {
         //create frame
var frameId = 'jUploadFrame' + id;
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;  
}  
                   }  
               } 
            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)
   {
      //create form  
var formId = 'jUploadForm' + id;
var fileId = 'jUploadFile' + id;
var form = $('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');    
var oldElement = $('#' + fileElementId);
var newElement = $(oldElement).clone();
$(oldElement).attr('id', fileId);
$(oldElement).before(newElement);
$(oldElement).appendTo(form);
//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 = s.fileElementId;        
var form = jQuery.createUploadForm(id, s.fileElementId);
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 () {}};    
},
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" )
            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;
}
})


相關推薦

ajaxfileupload.js常見問題解決方法彙總 修復原始碼

首先說的是這個外掛已經比較老了,但是如果你的專案對上傳要求不那麼高的話,或者僅僅只是作為個人專案裡面使用的話,我感覺還是可以的。1.這個上傳外掛有一個比較嚴重的缺陷,那就是隻有第一次上傳的時候有效,第一次上傳之後再次上傳其他檔案都無效,那麼為什麼會這樣呢?開啟谷歌consol

4G工業路由器的常見問題解決方法彙總

隨著無線網的普及,越來越多的人在使用無線裝置,首先近幾年來使用最廣泛的就是4G 工業路由器了。隨之而來在使用的過程中出現的故障問題也多了起來,在無線上網的過程中,常會遭遇到各式各樣的無線網路故障,今年小編就為大家整理了一下4G工業路由器的常見問題及解決方法,方便大家更好的解決

IOS AppStore常見被拒郵件解決方法彙總

We noticed that your app requests the user’s consent to access the camera but does not clarify the use of this feature in the permission modal alert.Please

瀏覽器相容問題解決方法彙總(持續更新......)

一、出現相容問題的原因:         瀏覽器種類很多,但是區別主要在瀏覽器核心的不同,所以各核心對網頁的解析差異,是導致瀏覽器相容問題出現的主要原因。關於瀏覽器核心(browser kernel),是瀏覽器最為核心

專案實際問題解決方法彙總

1、jsp 網頁 提示 import=“java.sql.*” 錯誤 之前專案是可以正常執行的,後來再次開啟後發現import="java.sql.*標紅了,首先檢查WEB-INF下的 lib 包中有 sql 的jar包。沒有就加入:選中 lib ,右鍵, build path ->c

TC Games 電腦玩手機遊戲助手全新版本常見問題解決方法彙總

一、若沒有使用官方預設鍵位,滑鼠控制方向失效解決辦法: 1.如圖,準心必須在右半屏 2.準心快捷鍵必須在如圖的空白區間 3.設定-新手引導-參照設定將遊戲的控制模式改為第一次,瞭解學習使用技巧 http://www.sigma-rt.com/tcgames/qa/in

部分Linux學習遇到的問題解決方法彙總

說明:使用的是VMware虛擬機器上的CentOS 6.7的Linux系統,用的是命令列介面。本文主要是彙總記錄一些學習過程中遇到的部分問題和解決方法,就當做是Linux學習筆記吧!(Q即問題,A即解決方法) Q:”man”命令不可用,提示:-bash:m

ajaxfileupload.js問題彙總解決 修復下載

使用Jquery做上傳檔案處理時,用到了ajaxfileupload.js 這個第三方程式碼,但是這個js幾乎就是半成品,問題很多。現在整理如下並附修復版的ajaxfileupload.js下載。 問題: 1:無法帶引數提交,只能上傳檔案; 2:執行時報:jQuer

js常見跨域問題解決方法

什麼是跨域? 概念:只要協議、域名、埠有任何一個不同,都被當作是不同的域。 URL 說明 是否允許通訊 http://www.a.com/a.js http://www.a.com/b.js 同一域名下

js文件中寫el表達式取不到值的原因解決方法

.ajax cnblogs 一個 雙引號 ssid null 使用 ucc name 1、javascript是客戶端執行,EL是在服務端執行,而服務端比客戶端先執行,所以取不到值 2、要想獲取"${jcDropClass.jcClass.id}"的值,可以在jsp中,用一

Maven常見異常解決方法

for display maven2 main collect nts exist temp set 異常1: [ERROR] Failed to execute goal on project biz_zhuhai: Could not resolve dependen

web程序常見錯誤解決方法

開始 個數字 ice 依據 文件中 方法參數 500錯誤 程序 運行 404錯誤產生原因及解決方法 在剛開始進行Web應用開發的時候,經常看見頁面出現404這個數字,我們一般會稱之為運行產生了404錯誤。類似於404這個數字,還有可能在頁面上看到405、500這兩個數字,他

銀河麒麟操作系統常見問題解決方法(四)

更換 架構 ash 信息技術 .cn 計算 科技 安裝問題 cti 銀河麒麟操作系統常見問題及解決方法(四) ——激活問題 銀河麒麟操作系統是國防科大唯一授權給天津麒

NFS服務的簡介常見故障解決方法

NFS文件系統介紹 NFS配置詳解 NFS常見故障及解決方法 NFS文件系統詳解 NFS實現自動掛載 NFS服務的簡介及常見故障解決方法1、NFS基本介紹(1)NFS簡介 NFS 是Network File System的縮寫,即網絡文件系統。一種使用於分散式文件系統的

webpack構建工具常見問題解決方法

webpack 常見問題 build報錯 webpack構建工具常見問題及解決方法 在運用webpack開發項目的時候經常會遇到各種各樣的問題,我對實際開發項目中實際遇到的一些問題 進行總結,希望能幫助到大家。 ?? 1. 構建需要的包未添加依賴報錯 Module not fo

IIS_常見問題解決方法

解決問題 解決辦法 div www. 命令提示符 spa usr ebs occurred 配置錯誤 在唯一密鑰屬性“value”設置為“default.aspx”時,無法添加類型為“add&r

jenkins 常見錯誤解決方法整理

ref 令行 follow ESS tro windows ins 常見錯誤 以管理員身份運行 現象 WMI.WmiException:AccessDenied 解決方法: 以管理員身份運行 cmd 命令行 jenkins-slave install jenkins

常見小票打印機打印故障解決方法匯總視頻教程

mar 而且 電腦 打印機 硬件 外部 col 自主 亂碼 通過對“常見小票打印機故障及解決方法匯總視頻教程”課程學習,達到以下目的:1、可以獨立自主安裝打印機驅動以及安裝打印機硬件設備 2、可以獨立自主排除常見打印機故障學習教程 常見小票打印機故障:【小票打印機不打印故障

Maven常見異常解決方法---測試代碼編譯錯誤

detail mave https ror 錯誤 failure 異常 gin pro [ERROR] Please refer to E:\maven\web_nanchang\target\surefire-reports for the individual test

Solr12-SolrCloud部署中的常見問題解決方法

目錄 1 ZooKeeper管理配置檔案的另一種方法 2 Solr服務不能訪問 3 部分或全部節點處於”Recovering”或”Gone”狀態 4 SolrCloud模式下, 啟動Tomcat服務耗時太久 5 其他問題(尚未驗證, 請存疑) 參考資料 1 ZooKeeper