Ajax提交form表单

  1. 1、将form表单数据序列化
  2. 2、通过窗口查找form并submit提交
  3. 3.将表单转为JSON字符串提交
    1. SpringBoot的Controller中接收JSON参数

ajax提交form表单,这在日常项目中是经常用到的。前台无论是简单的html、jsp或者使用了easyui框架,只要是提交表单一般都会使用到ajax。

ajax提交表单分为两种:

1、无返回结果的,就是把表单数据直接提交给后台,让后台直接处理;

最简单的就是$(“#formid”).submit();直接将form表单提交到后台。

2、返回有结果的,这种情况下,后台不管是执行成功还是失败,最终的信息都需要返回到前台。

第二种是使用最多的一种,因为程序的执行成功与否都需要给用户提示,程序一般也都是多步完成的,执行完插入操作,需要发起流程,这就需要在界面上判断成功与否。ajax本身属于有返回结果的一类,其中的success方法就是处理后台返回结果的。

ajax提交表单有返回结果的实现方式:

1、将form表单数据序列化

<span style="font-size:18px;">  $.ajax({  
    type: "POST",  
    url:your-url,  
    data:$('#yourformid').serialize(),  
    async: false,  
    error: function(request) {  
        alert("Connection error");  
    },  
    success: function(data) {  
        //接收后台返回的结果  
    }  
  });</span>  

需要注意的是,使用这种方法的前提是form表单中的项一定要有name属性,后台获取的键值对为key=name值,value=各项值。

注意:无论是input标签还是span标签或者其他标签,一定要有name属性,没有name属性后台是获取不到该项的。

2、通过窗口查找form并submit提交

<span style="font-size:18px;">  // 提交表单  
  var obj = document.getElementById("xx_iframe").contentWindow;  
  obj.$("#yourform").form("submit",{  
    success :function(data){  
        //对结果处理  
    }    
  });</span>

因为在当前界面上弹出对话框,然后在对话框上的按钮触发对话框中表单提交,对话框又是链接的另外的html页面,如此通过$(“#formid”)的方式是找不到对话框中的form的,因此这种情况下只能使用这种方式提交表单。

另外ajax中封装的get,post请求也都属于有返回结果的一类。

总的来说,无返回结果的和有返回结果的(将form表单数据序列化+通过窗口实现form提交),form表单都必须要有name属性。

3.将表单转为JSON字符串提交

var formObject = {};	//JSON对象
var formArray =$("#client_satisfaction_form").serializeArray();
$.each(formArray,function(i,item){
    formObject[item.name] = item.value;
});


//提交表单
$.ajax({
    type: "POST",
    url: "/calculateClientSatisfaction",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(formObject),
    dataType: 'json',
    async: true,
    error: function(request) {
        alert("Connection error");
    },
    success: function(data) {
        alert("OK");

    }
});

注意,JSON字符串只能以POST方式提交。

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid charact

当在浏览器中访问时 URL中带有特殊字符,如花括号冒号时,就会出现以上错误。GET方式提交就会报此错误。

例如:http://localhost:8080/index.do?{id:123}

SpringBoot的Controller中接收JSON参数

推荐用@RequestBody注解来接收

@PostMapping("calculateClientSatisfaction")
public String calculateClientSatisfaction(@RequestBody JSONObject clientSatisfactionStr){
   
    System.out.println(clientSatisfactionStr);
	...
}

或者可以用复古的request

@ResponseBody
@RequestMapping(value = "/request/data", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public String getByRequest(HttpServletRequest request) {

    //获取到JSONObject
    JSONObject jsonParam = this.getJSONParam(request);

    // 将获取的json数据封装一层,然后在给返回
    JSONObject result = new JSONObject();
    result.put("msg", "ok");
    result.put("method", "request");
    result.put("data", jsonParam);

    return result.toJSONString();
}

FOX<6nAiiPf6


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,邮件至 708801794@qq.com

文章标题:Ajax提交form表单

文章字数:875

本文作者:梅罢葛

发布时间:2020-04-28, 19:24:31

最后更新:2020-04-29, 15:49:34

原始链接:https://qiurungeng.github.io/2020/04/28/Ajax%E6%8F%90%E4%BA%A4%E8%A1%A8%E5%8D%95/
目录
×

喜欢就点赞,疼爱就打赏