jQuery循环N多个form把json传入后台

叶师傅之做事的思路(考虑数据的完整性)

首先,有的时候页面需要添加多条相同类别的信息,比如说传输专业一次添加多条,这个时候的保存,删除,修改,查看,就这个时候就因为好好考虑一下,虽然有时候还是处理单一列表的状态比较多,比如一个html就一个form的情况。这个时候让我们好好想一想如何做

  • 想法一:把每一个专业信息看做一个整体,传到后台进行处理;因为添加的时候一次添加多条,从页面一个一个的提交,一次用ajax提交一个json.具体看下面的代码,从html到js到servlet都有了。
 //增加 
    function add(){
    $(function() {
    $("form").each(function(){//循环每一个表
        var arr=$("form1").serializeArray();
        var o = {};
        $.each(arr, function() {    
       if (o[this.name]) {    
           if (!o[this.name].push) {    
               o[this.name] = [o[this.name]];    
           }    
           o[this.name].push(this.value || '');    
       } else {    
           o[this.name] = this.value || '';    
       }    
      });  
      var sons = JSON.stringify(o);

      alert(sons);
          $.ajax({ 
          cache: false,
          async: false, 
          type: "POST", 
          url: "/servlet/SpecTransfersNeLet?flag=add", 
          datatype: "json", 
         // data:sons,
          data : {'mydata':sons},
          success: function( data ) { 
           } 
        }); 
     });
     var is='';
     if($("#isCopeSheet").is(":checked")) { 
          is=2;
      }else{
          is=0;
      }

    window.location.href="/servlet/SpecTransfersNeLet?flag=pro&sheetNo=<%=sheetNo%>&balkNo=<%=balkNo%>&is="+is;
      window.opener.refsheet(<%=balkNo%>,<%=sheetNo%>);
     window.close();
     }) 

//添加专业信息

++index;
function addXinYuan(){
     var row=transfers.insertRow(transfers.rows.length);
     var col2=row.insertCell(0);
     var idnum=transfers.rows.length+1;
      col2.innerHTML="<form>"
  +"     <table  align='center' class ='inputtable2'>"
     +"<tr>"
     +"<td class ='tdc'>专线</td>"
     +"<td class ='tdc'><input type='text' maxlength='60'  name='stlNum' value=''/></td>"
     +"<td class ='tdc'>电路类型</td>"
         +"<td class ='tdc'><input type='text' maxlength='60'  name='type' value=''/></td>"
      +"</table>"
      +" </form>";

}   




html部分(简化大概看个意思)

<table id="transfers"   align='center' class="inputtable1">
<form>
  <table  align='center' class ='inputtable2'>
    <tr>
    <td class ="tdc">专线</td>
    <td class ="tdc"><input type='text' maxlength='60'  name='stlNum' value=""/></td>
    <td class ="tdc">电路类型</td>
        <td class ="tdc"><input type='text' maxlength='60'  name='type' value=""/></td>
   </table>
</form>
<form>
  <table  align='center' class ='inputtable2'>
    <tr>
    <td class ="tdc">专线</td>
    <td class ="tdc"><input type='text' maxlength='60'  name='stlNum' value=""/></td>
    <td class ="tdc">电路类型</td>
        <td class ="tdc"><input type='text' maxlength='60'  name='type' value=""/></td>
   </table>
</form>
<form>
  <table  align='center' class ='inputtable2'>
    <tr>
    <td class ="tdc">专线</td>
    <td class ="tdc"><input type='text' maxlength='60'  name='stlNum' value=""/></td>
    <td class ="tdc">电路类型</td>
        <td class ="tdc"><input type='text' maxlength='60'  name='type' value=""/></td>
   </table>
</form>
<tr>    
<td align='right'>
    <input type='button'  name="button1" value="新增" class="button" onclick="addXinYuan();" />
</td>
</tr>
</table>

java代码 主要把json转化为javaBean就这简单几句话

            String son = request.getParameter("mydata");
            JSONObject jsonObject = JSONObject.fromObject(son);
            System.out.println(jsonObject);
            HashMap<String, Class> classMap = new HashMap<String, Class>();
            classMap.put("result", SpecTransfersNe.class);//我的专业类型 这个地方就是你要转化的自己的jAVABEAN
            SpecTransfersNe ne = (SpecTransfersNe) JSONObject.toBean(jsonObject, SpecTransfersNe.class, classMap);
  • 想法二:一次性把数据都提交到后台,这个时候就是一个大form包含多个table的情况,然后使用request.getParameterValues()拿到数据然后循环处理。这里就不贴代码了。大家都想得到的。
  • 总结这两种方法都有好处,现在我用第一种,代码特别简洁,一开始我也是图省事。可是- 叶师傅说这种方法有一个不好地方,比如一下子添加50条,提交到25的时候突然网掉线了,这个时候剩下的25条就没了,数据不完整。最好还是统一提后面处理,这个时候即使掉线也没关系,事务也不会提交。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值