ajax将数据发送到控制器

时间:2014-04-12 21:43:59

标签: jquery ajax spring-mvc

我想知道这两种语法之间的区别是什么:

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

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

我认为它们是相同的,但是当我使用第一个时,在我的spring控制器中,此属性具有完全填充的属性。当我使用第二种方法时,属性的所有属性都是null ??

有人对此有解释吗?

这是我的 JSP

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

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

</form:form>

这是JS

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

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

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

});

这是我的控制器

    @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
}

1 个答案:

答案 0 :(得分:4)

解释您使用代码获取null属性的原因在您的第一个变体中(它是正确的并且可以使用):

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

您已将序列化表单编入value变量。

在第二个版本中(它不正确且无法正常工作):

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

您将表单数据序列化为value,之后在序列化查询之前添加了valueName=。这根本不是正确的方法。

查询字符串必须是这样的,例如:param1=bob&param2=bob1&param3=mama。但在您的第二个示例中,查询字符串为:valueName=param1=bob&param2=bob1&param3=mama。这是无效的查询。这就是为什么属性为空。

在不序列化表单的情况下发送数据如果要发送一些参数,则必须使用其他方法(无论如何,params是form还是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
});

发送表单数据+一些额外的参数第一,我不认为发送表单字段+一些额外内容是个好主意。我认为更好的是将这些额外的参数添加到您的表单作为隐藏字段。无论如何,如果你想发送一些非in-form + in-form参数,请尝试下一个代码:

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;
});