简体   繁体   English

Ajax发送数据到控制器

[英]ajax send data to controller

I'm was wondering what is the difference between these two syntaxes: 我想知道这两种语法之间的区别是什么:

  var value = $("#myForm").serialize();
  $.ajax({
    type: "post",
    url: "testMethod",
    data: value
});

and

  var value = $("#myForm").serialize();
  $.ajax({
    type: "post",
    url: "testMethod",
    data: "valueName=" + value
});

I thought they are the same but when I use the first one, in my spring controller this attribute have fully populated properties. 我以为它们是相同的,但是当我使用第一个时,在我的spring控制器中,此属性具有完全填充的属性。 When I use the second approach, all the properties of the attribute are null ?? 当我使用第二种方法时,该属性的所有属性均为null。

Someone have explanation for this? 有人对此有解释吗?

This is my JSP : 这是我的JSP

<form:form id="myForm" action="*" modelAttribute="filters" >

    <form:input ...  path="age" />  
    <form:input ...  path="gender" />   
    <form:input ...  path="location" /> 

</form:form>

This is JS 这是JS

$('#ok_provinces_btn_id').click(function(){
var second = $('#secondAttr').val();

var f = $("#myForm").serialize();

$.ajax({
    type: "post",
    url: "testMethod",
    data: ?????
});

}); });

This is my Controller 这是我的控制器

    @RequestMapping(value="testMethod", method=RequestMethod.POST)
public void testMethod(
        @ModelAttribute("filters") FiltersWrapper filters,
                    @RquestParam String second
        ){

             //Here the **second** param is OK 
    filters.getAge(); //NULL
}

Explaining why you get null attributes with your code In your first variant ( it is correct and will work ): 解释为什么在代码的第一个变体中获得空属性的原因这是正确的并且可以工作 ):

  var value = $("#myForm").serialize();
  $.ajax({
    type: "post",
    url: "testMethod",
    data: value
});

You already had serialized form into value variable. 您已经将表格序列化为value变量。

In the second variant ( it is incorrect and wouldn't work ): 在第二个变体中( 这是不正确的,将不起作用 ):

  var value = $("#myForm").serialize();
  $.ajax({
    type: "post",
    url: "testMethod",
    data: "valueName=" + value
});

You serialized form data into value and after that added valueName= before serialized query. 您将表单数据序列化为value ,然后在序列化查询之前添加了valueName= It is not correct approach at all. 这根本不是正确的方法。

Query string must be such, for example: param1=bob&param2=bob1&param3=mama . 查询字符串必须是这样的,例如: param1=bob&param2=bob1&param3=mama But in your 2nd example query string is: valueName=param1=bob&param2=bob1&param3=mama . 但在第二个示例中,查询字符串为: valueName=param1=bob&param2=bob1&param3=mama It is invalid query. 这是无效的查询。 Thats why properties are null. 这就是为什么属性为null的原因。

Sending data without serializing form If you want to send some parameters, you have to use another approach (anyway params are form or non-form): 在不序列化表单的情况下发送数据如果要发送一些参数,则必须使用另一种方法(无论参数是表单还是非表单):

var param1 = $("#id_of_needed_data").val();
var param2 = $("#id_of_needed_data").val();
// etc
$.ajax({
    type: "post",
    url: "testMethod",
    data: "param1="+param1+"&param2="+param2; // etc
});

Sending form data + some extra params Firstyly, I don't think it is good idea to send form fields + some extra. 发送表单数据+一些额外的参数首先,我认为发送表单字段+一些额外的东西不是一个好主意。 I think better is to add this extra params to your form as hidden fields. 我认为最好将这些额外的参数作为隐藏字段添加到表单中。 Anyway, if you want to send some non-in-form + in-form parameters try next code: 无论如何,如果您要发送一些非格式+格式参数,请尝试以下代码:

var param1 = $("#id_of_needed_data").val();
var param2 = $("#id_of_needed_data").val();
// etc
var value = $("#myform").serialize();
var query = value;
if (value != '') {
    query = query + "&";
}
query = query + "param1="+param1+"&param2="+param2;

$.ajax({
    type: "post",
    url: "testMethod",
    data: ; query;
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM