今天用ajaxFileUpload作了一个上传文件到服务器的功能。javascript
出现问题:先上传了一次,后来发现读取完成之后,再上传的时候前台调试file和自动义参数都传进,但后台获取的仍然是上一次上传时的相关参数,必需要刷新页面才能够再次上传。java
缘由:上查资料明确问题应该是ajaxFileUpload.js插件问题所致。ajax
网上解决办法:在ajaxFileUpload.js源码中找到:createUploadForm 找到这一段json
- <pre name="code" class="javascript">var oldElement = $('#' + fileElementId);
- var newElement = $(oldElement).clone();
- $(oldElement).attr('id', fileId);
- $(oldElement).before(newElement);
- $(oldElement).appendTo(form);
改成:安全
- var oldElement = $('#' + fileElementId);
- var newElement = $(oldElement).clone(true);
- $(oldElement).attr('id', fileId);
- $(oldElement).before(newElement);
- $(oldElement).appendTo(form);
然而处理后并无用,仔细分析ajaxFileUpload.js源码后,是因为第一次上传插入一个id="fireUploadForm"+id的表单到body中,第二次上传时这个form表单仍然存在,经过form的Id去拿form时是上一次上传时的表单。服务器
- var form = jQuery('#' + formId);
- jQuery(form).attr('action', s.url);
- jQuery(form).attr('method', 'POST');
- jQuery(form).attr('target', frameId);
打印输出:app
- var type=$("input[name='type']:checked").val();
- var formId = 'jUploadForm' + 'file';
- var test1 = jQuery('#'+formId);
- console.log("1:"+test1.prop("outerHTML"));
- $.ajaxFileUpload(...);
第一次上传:url
第二次上传:spa
- 1:<form action="importData" method="POST" name="jUploadFormfile" id="jUploadFormfile"
- 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
- var name=$("#name option:selected").text();
- var type=$("input[name='type']:checked").val();
- var formId = 'jUploadForm' + 'file';
- var test1 = jQuery('#'+formId);
- if(test1.length>0){
- test1.remove();
- }
- $.ajaxFileUpload(
- {
- url: 'importData',
- secureuri: false,
- fileElementId: 'file',
- dataType: 'json',
- data:{"name":name,"type":type}
- }
- );