jquery.form.js 插件 ajaxSubmit的问题

GodByeWord 发布于 2014/12/08 14:45
阅读 1K+
收藏 1

使用jquery.form.js异步提交form,form里面是datatable,例如table的每一行是:<tr><input type="file" name="uploadFile"/><input type="input" name="description"></tr>。意思就是,我除了要提交表单的普通数据,还要提交上传的图片。上传文件也弄正常工作,那么问题来了:

例如form提交了5条数据,后台获取<input type="input" name="desc">是5条;但是,如果<input type="file" name="uploadFile"/>没有选择图片,那么后台获取的file的size就是0,或者只有2个或者3个选择了图片,那后台获取file的size就是2、3;问题就是file的size和description的size对不上。后台需要遍历获取的参数的时候就会空指针异常。在线等,今天客户要求改成ajaxsubmit。

上图:





说明:前端只有第二行选择了图片,后台获取的图片的size就是1,而其他参数的size是3,这时遍历的时候就会出问题。

附上后台java code:

String[] ids = request.getParameterValues("id");
if(ids != null && ids.length > 0){
String[] displayNames = request.getParameterValues("displayName");//size 是 3
List<MultipartFile> files = request.getFiles("files");//页面全部选择了图片size也是3,这时候就没问题;如果不是全部选择了图片,遍历的时候会出问题
for(int i=0; i<ids.length; i++){
if(files !=null && files.size() > 0 && !files.get(i).isEmpty()){//就是这里
//...
}else{
//...
}
}
}

以下是问题补充:

@GodByeWord:或者有其他的可以实现ajaxsubmit的朋友,也欢迎支招! (2014/12/08 14:46)
加载中
1
岁月留魂
岁月留魂
如果非要一起的话,那你的file 的名字就应该定义成: name_id ,id为对应数据的标示
wx---羊毛联盟
wx---羊毛联盟
回复 @非良 : lz钻了
wx---羊毛联盟
wx---羊毛联盟
@岁月留魂 钻牛角尖了。
岁月留魂
岁月留魂
回复 @非良 : 你同意不白瞎吗?lz不明白还是不行~
wx---羊毛联盟
wx---羊毛联盟
我同意这个。
0
sikele
sikele
name不要用同一个 uploadFile[0] uploadFile[1]这样
sikele
sikele
所以啊 item[0].uploadFile 和 item[0].description 一起的item[1].uploadFile和item[1].description 一起的,这样子设置name,和数量有毛关系,后台怎么映射就看你自己了,我这儿是能直接得到对应的数组的。
GodByeWord
GodByeWord
不是的,我遇到的问题是,前端的<input type="file"/>如果没有选择文件或者只选择了不到5个文件,文件的size和description的size对不上;当然如果前端都选择了文件,那就对上了
0
leizhenglian
leizhenglian
desprition是不是合并成一条数据了,你打个断点跟踪下
GodByeWord
GodByeWord
不是的,我遇到的问题是,前端的<input type="file"/>如果没有选择文件或者只选择了不到5个文件,文件的size和description的size对不上;当然如果前端都选择了文件,那就对上了
0
wx---羊毛联盟
wx---羊毛联盟
从名称入手吧。能用不同的名字吗?
GodByeWord
GodByeWord
和名称没有关系,再说如果用不同的名称,后面无法遍历的
0
岁月留魂
岁月留魂
图片单独传可以吗?其他信息按你正常流程传
岁月留魂
岁月留魂
回复 @GodByeWord : 哥们,对不上无所谓啊,file的name定义成file_id desc的name定义成 des_id 这样遍历获取的 ,不行就把你做更新的ids 传过去,遍历解析对比判断!你可以理解吗?
GodByeWord
GodByeWord
图片都可以接受到,选了几个图片,后台就可以拿到几个图片;问题就是,就像你说的,单独选择一个图片,没问题,后台遍历的时候,description的 size和图片的size对不上
0
封心
封心

这样的流程怎么样:图片先上传,返回值用js填充到input里,然后表单提交

封心
封心
回复 @GodByeWord : 满足不了?每条信息里加个隐藏的input,上传的图片用 js回填到隐藏的input里,这样提交后,后台判断input是否有值不就行了,size数量也不会少啊
GodByeWord
GodByeWord
是个好办法,但是满足不了我这边需求...
0
GodByeWord
GodByeWord
感谢大家的热心帮助,@ 岁月留魂,最先提出来的解决方案可以解决我遇到的问题。
0
GodByeWord
GodByeWord
我最终还是用插件的 iframe:true 属性解决了问题,这是最简单的。
返回顶部
顶部