今天用ajaxFileUpload做了一个上传文件到服务器的功能。

出现问题:先上传了一次,后来发现读取完成以后,再上传的时候前台调试file和自动义参数都传进,但后台获取的仍然是上一次上传时的相关参数,必须要刷新页面才可以再次上传。

原因:上查资料明确问题应该是ajaxFileUpload.js插件问题所致。

网上解决办法:在ajaxFileUpload.js源码中找到:createUploadForm 找到这一段

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

改为:

  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时是上一次上传时的表单。

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

打印输出:

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

第一次上传:

  1. 1:undefined

第二次上传:

  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>

解决办法:

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

最新文章

  1. Android 手机卫士--导航界面2
  2. 转载 - Vultr VPS注册开通且一键快速安装PPTP VPN和电脑连接使用
  3. JS 对象遍历
  4. 0505--鲜花售卖网之“NABCD模型”
  5. hdu 2048 神、上帝以及老天爷
  6. IIS 之 HTTP 错误 500.19(无法访问请求页面,因为该页的相关配置数据无效)
  7. IE6/IE7中li底部4px的Bug
  8. emoji处理方法汇总
  9. poj 1083 Moving Tables_dp
  10. mysql 执行计划走索引
  11. InjectAPC全部项目(Win32和Win64位)
  12. Javascript正则表达式(上)
  13. BZOJ-1010-[HNOI2008]玩具装箱toy(斜率优化)
  14. Centos系统下硬盘扩容
  15. 排序算法之low B三人组
  16. [CTSC 1999]拯救大兵瑞恩&amp;[网络流24题]孤岛营救问题
  17. 网站开发进阶(四十四)input type=&quot;submit&quot; 和&quot;button&quot;的区别
  18. Android O广播接收情况
  19. Microsoft.AspNet.Web.Optimization.Bundle的完美替换方案
  20. python学习笔记(四)

热门文章

  1. 批处理系列(18) - 基于BitLocker的开锁上锁
  2. openvswitch 源码分析 OVS_ACTION_ATTR_HASH action
  3. Systemd 服务管理器
  4. 奇异值分解(SVD)详解及其应用
  5. vue 学前班003(生命周期)
  6. java 中 enum 枚举的使用
  7. 一个自动换行,不可以滚动的 textview
  8. Dynamic Type
  9. JS优先队列排序。出队时,先找出优先级最高的元素,再按照先进先出出队。
  10. Lingo 做线性规划 - Financial Applications