Ajax发送数据到控制器
我想知道这两种语法之间的区别是什么:
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。
有人对此有解释吗?
这是我的 :
<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
}
回答:
的第一个变体中 ( ):
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¶m2=bob1¶m3=mama
。但在第二个示例中,查询字符串为:valueName=param1=bob¶m2=bob1¶m3=mama
。这是无效的查询。这就是为什么属性为null的原因。
如果要发送一些参数,则必须使用另一种方法(无论参数是表单还是非表单):
var param1 = $("#id_of_needed_data").val();var param2 = $("#id_of_needed_data").val();
// etc
$.ajax({
type: "post",
url: "testMethod",
data: "param1="+param1+"¶m2="+param2; // etc
});
首先,我认为发送表单字段+一些额外的东西不是一个好主意。我认为最好将这些额外的参数作为隐藏字段添加到表单中。无论如何,如果您要发送一些非格式+格式参数,请尝试以下代码:
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+"¶m2="+param2;
$.ajax({
type: "post",
url: "testMethod",
data: ; query;
});
以上是 Ajax发送数据到控制器 的全部内容, 来源链接: utcz.com/qa/408100.html