關於ajaxFileUpload只能上傳一次的解決

今天用ajaxFileUpload作了一個上傳文件到服務器的功能。javascript

出現問題:先上傳了一次,後來發現讀取完成之後,再上傳的時候前臺調試file和自動義參數都傳進,但後臺獲取的仍然是上一次上傳時的相關參數,必需要刷新頁面才能夠再次上傳。java

緣由:上查資料明確問題應該是ajaxFileUpload.js插件問題所致。ajax

網上解決辦法:在ajaxFileUpload.js源碼中找到:createUploadForm 找到這一段json

 

[javascript]  view plain  copy
 
  1. <pre name="code" class="javascript">var oldElement = $('#' + fileElementId);    
  2. var newElement = $(oldElement).clone();    
  3. $(oldElement).attr('id', fileId);    
  4. $(oldElement).before(newElement);    
  5. $(oldElement).appendTo(form);   

改成:安全

 

[javascript]  view plain  copy
 
  1. var oldElement = $('#' + fileElementId);    
  2. var newElement = $(oldElement).clone(true);    
  3. //須要複製元素的全部事件處理。  
  4. $(oldElement).attr('id', fileId);    
  5. $(oldElement).before(newElement);    
  6. $(oldElement).appendTo(form);   

然而處理後並無用,仔細分析ajaxFileUpload.js源碼後,是因爲第一次上傳插入一個id="fireUploadForm"+id的表單到body中,第二次上傳時這個form表單仍然存在,經過form的Id去拿form時是上一次上傳時的表單。服務器

 

[javascript]  view plain  copy
 
  1. //(此段爲ajaxFileUpload.js源碼)  
  2. var form = jQuery('#' + formId); //這裏拿到的仍是上一次上傳數據時的表單  
  3. jQuery(form).attr('action', s.url);  
  4. jQuery(form).attr('method', 'POST');  
  5. jQuery(form).attr('target', frameId);  

打印輸出:app

 

[javascript]  view plain  copy
 
  1. //此段爲本身的js var name=$("#name option:selected").text();  
  2.  var type=$("input[name='type']:checked").val();  
  3.  var formId = 'jUploadForm' + 'file';  //file爲input的id  
  4.  var test1 = jQuery('#'+formId);  
  5.  console.log("1:"+test1.prop("outerHTML"));//打印輸出  
  6.  $.ajaxFileUpload(...);  

第一次上傳:url

 

 

[plain]  view plain  copy
 
  1. 1:undefined  

第二次上傳:spa

 

 

[plain]  view plain  copy
 
  1. 1:<form action="importData" method="POST" name="jUploadFormfile" id="jUploadFormfile"   
  2. enctype="multipart/form-data" target="jUploadFramefile" style="position: absolute; top: -1200px; left: -1200px;"><input type="file" name="file" id="jUploadFilefile"><input type="hidden" name="projectName" value="AutoTestingTool"><input type="hidden" name="importType" value="1"></form>  

 

解決辦法:.net

[javascript]  view plain  copy
 
  1. var name=$("#name option:selected").text();  
  2. var type=$("input[name='type']:checked").val();  
  3. var formId = 'jUploadForm' + 'file';  //file爲input的id  
  4. var test1 = jQuery('#'+formId);  
  5.        if(test1.length>0){  
  6.       test1.remove();  
  7.   } //若是存在id = formId的表單,先進行刪除,處理掉上一次上傳遺留的form</span></span><span   
  8. $.ajaxFileUpload(  
  9.         {  
  10.             url: 'importData',//用於文件上傳的服務器端請求地址,url傳參?name='+name+'&&type='+type+''  
  11.             secureuri: false, //是否須要安全協議,通常設置爲false  
  12.             fileElementId: 'file', //文件上傳域的ID  
  13.             dataType: 'json', //返回值類型 通常設置爲json  
  14.             data:{"name":name,"type":type} //傳參存在問題,可改url傳參  
  15.         }  
  16. );  
相關文章
相關標籤/搜索