ajax提交多个form表单

首先对某一表单进行Json对象序列化: 

 

引用:http://my249645546.iteye.com/blog/1617872

 

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. (function($){  
  2.         $.fn.serializeJson=function(){  
  3.             var serializeObj={};  
  4.             var array=this.serializeArray();  
  5.             var str=this.serialize();  
  6.             $(array).each(function(){  
  7.                 if(serializeObj[this.name]){  
  8.                     if($.isArray(serializeObj[this.name])){  
  9.                         serializeObj[this.name].push(this.value);  
  10.                     }else{  
  11.                         serializeObj[this.name]=[serializeObj[this.name],this.value];  
  12.                     }  
  13.                 }else{  
  14.                     serializeObj[this.name]=this.value;   
  15.                 }  
  16.             });  
  17.             return serializeObj;  
  18.         };  
  19.     })(jQuery);  


var proRuestl_1 = $("#proResult1").serializeJson();//数据序列化

var proRuestl_2= $("#proResult2").serializeJson();//数据序列化

var proRuestl_3= $("#proResult3").serializeJson();//数据序列化

 

然后对数据的合拼

 

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. $.extend(param, proRuestl_1,proRuestl_2,proRuestl_3);  


最后用ajax提交

 

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. $.ajax({  
  2.     type: "POST",  
  3.     async: false,  
  4.     url: 'XXXX',  
  5.     data: param,  
  6.     dataType: "json",  
  7.     success  :  })  


这样不单可以提交多个表单的参数,还可以防止乱码的出现!



===========================最新分割线===========================================

样例

var obj = {
       demandOrderId: "",
        applyUser: "",
        assetsName: "",
        realPrice:"",
        demandCount: "",
        applyCount: "",
        notApplyCount: "",
        allocationCount: "",
        createBy: "",
        createDate: "",
        updateBy: "",
        updateDate: "",
        createByCode: "",
        updateByCode: "",
        projectCode: "",
        specificationParameter: "",
        functions: "",
        optionalAccessories: "",
        acceptanceCriteria: "",
        standardComputer: "",
        referenceUnitPrice: "",
        referencePrice: "",
        inquiryUnitPrice: "",
        inquiryPrice: "",
        requirementsDate: "",
        costCenter: "",
        useDescription: "",
        units: "",
        applyUserCode: "",
        applyDepartment: "",
        applyDepartmentCode: "",
        assetType: "",
        referencePriceLocal: "",
        currencyCode: "",
        exchangeRate: "",
        inquiryPriceLocal: "",
        reducedBudgetLocal: "",
        notReducedBudgetLocal: "",
        budgetYear: "",
        budgetAssetsName:"",
        avaliableSumMoneyOld:""
   };
   var demandOrderWrapper = {};
   //添加表头
   objHeader = $("#demandOrderFormHeader").serializeObject();

   objFooter = $("#demandOrderFormFooter").serializeObject();
   //获得订单总金额
   objHeader.applyBudgetMoney = $("#sumTxtReferencePrice").val()==""?"0":$("#sumTxtReferencePrice").val();
   //获得申请部门名称
   //objHeader.applyDepartment = $("#txtApplyDepartment").find("option:selected").text();
   //获得公司名称
   //objHeader.companyName = $("#txtCompanyCode").find("option:selected").text();

   objHeader.building = $("input[name='building']:checked").val();
   //修改立项书的项目类型
   var strpt="";
   $("input:checkbox[name=projectType]:checked").each(function(){
      strpt += $(this).val()+"-*-*-";
   });
   strpt += $("#txtProjectType").val();
   objFooter.projectType = strpt;


   var objDemandOrder = $.extend({}, objHeader,objFooter);
   objDemandOrder.draft = strDraft;
   objDemandOrder.idea = idea;
   objDemandOrder.isMail = isMail;
   objDemandOrder.isPhoneMessage = isPhoneMessage;
   demandOrderWrapper.demandOrder = objDemandOrder;
   //公司名称
   objDemandOrder.companyName = $("#txtCompanyCode").find("option:selected").text();
   ///获得表单明细信息 封装Json对象
   var objArr = constructObjectFromTable(obj, $("#table_detail .bodyTr"));

   demandOrderWrapper.demandOrderDetails = objArr;
   //console.log(demandOrderWrapper);
    $.ajax({
           type: "POST",
           dataType: "json",
           async: false,
           contentType: "application/json; charset=utf-8",
           url: "${dynamicURL}/demand/api/saveDemand",
           data: JSON.stringify(demandOrderWrapper),
           success: function(data) {
               if (data.errorMessages.length > 0) {
                   var str = data.errorMessages;
                   alert(str);
            var reg = new RegExp("^.*保存成功.*$");
            if (reg.test(str)) {
               dg.curWin.location = dg.curWin.location;
            }
                   return;
               }
               alert("添加成功!");
               //关闭窗口
               dg.curWin.refresh();
               return;
           }
       });
}

function constructObjectFromTable(object, $object) {
   var javaObjArray = [];

   $object.each(function(i) {
        var javaObj = {};

        for (var p in object) {
           var $val = $(this).find('input[name="'+p+'"]');
           if ($val.length === 0) {
              javaObj[p] = $(this).find('select[name="'+p+'"]').val();
           } else {
              javaObj[p] = $val.val();
           }
        }

        javaObjArray.push(javaObj);
   });

   return javaObjArray;
}

后台controller和实体类

/**
 * 保存 新增
 *
 * @param demandOrderWrapper
 * @return
 */
@RequestMapping("/api/saveDemand")
@ResponseBody
public ExecuteResult<DemandOrder> saveDemand(@RequestBody DemandOrderWrapper demandOrderWrapper) {
    ExecuteResult<DemandOrder> executeResult = new ExecuteResult<DemandOrder>();
    //表头信息
    DemandOrder demandOrder = demandOrderWrapper.getDemandOrder();
    //明细信息
    List<DemandOrderDetail> demandOrderDetails = demandOrderWrapper.getDemandOrderDetails();
   }
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class DemandOrderWrapper {
   private DemandOrder demandOrder;
   private List<DemandOrderDetail> demandOrderDetails;
}


======================================================================

可以使用 JavaScript 来实现多个表单共用一个提交的功能。具体实现步骤如下: 1. 给每个表单添加一个 class 或 ID,用于标识不同的表单。 2. 给提交按钮添加一个点击事件,获取所有表单的数据,并进行提交。 3. 在点击事件中,使用 `document.querySelectorAll()` 方法获取所有表单元素,然后遍历每个表单,获取表单数据,并将数据拼接成一个对象。 4. 最后将获取到的数据对象使用 Ajax 或表单提交方式进行提交。 下面是一个简单的示例代码,供参考: HTML 代码: ```html <form class="form1"> <input type="text" name="username" /> <input type="password" name="password" /> </form> <form class="form2"> <input type="text" name="email" /> <input type="text" name="phone" /> </form> <button id="submitBtn">提交</button> ``` JavaScript 代码: ```js const submitBtn = document.querySelector('#submitBtn'); submitBtn.addEventListener('click', () => { const forms = document.querySelectorAll('form'); const data = {}; forms.forEach((form, index) => { const formData = new FormData(form); for (let [key, value] of formData.entries()) { data[`form${index + 1}_${key}`] = value; } }); // 使用 Ajax 或表单提交方式进行提交 // ... }); ``` 在上面的代码中,我们将表单数据拼接成了一个对象 `data`,并通过 `data` 对象来传递数据。在实际开发中,可以根据需求来选择使用 Ajax 或表单提交方式进行提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值