我想通过ajax发送json请求,我喜欢从控制器解析。请找到我的以下代码(查看部分)
<input type="checkbox" id="selectall" />
<table id="tbl" border="1">
<tr>
<td>
<input type="checkbox" />
</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>
<input type="checkbox" />
</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>
<input type="checkbox" />
</td>
<td>2</td>
<td>3</td>
<td>5</td>
</tr>
</table>
<input type="button" id="save" value="save" />
<div id="log"></div>
JQuery部分
$("#save").click(function() {
//get all the checked checboxex
$('#tab input:checkbox:checked').each(function() {
//for each checked checkbox, iterate through its parent's siblings
var array = $(this).parent().siblings().map(function() {
return $(this).text().trim();
}).get();
//to print the value of array
console.log(JSON.stringify(array))
$.ajax({
type : 'POST',
url : '@routes.Application.save()',
dataType: "json",
data: JSON.stringify(array),
success : function(data) {
console.log("success");
},
error : function() {
alert("failure")
}
});
})
控制器部分
public static Result saveboxes()
{
JsonNode json = null;
try{
DynamicForm dynamicForm = new DynamicForm();
dynamicForm = dynamicForm.bindFromRequest();
Dynamic dynamic = dynamicForm.get();
json = Json.toJson(dynamic.getData());
//String data = json.get("data").asText();
JsonNode jsonData = Json.parse(json.asText());
logger.info(jsonData.asText());
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
我得到空指针异常。视图将根据用户选择复选框返回多行值。如果用户选择三行,则输入为[“2”,“3”,“4”] [“2”,“3”,“4”] [“2”,“3”,“5”]。我需要获得控制器中的所有值。如果你建议比这更好的方法。这会很棒。
答案 0 :(得分:0)
我检查了你发送的数据格式,它不是json格式。 它应该是这样的:
{
[
"2",
"3",
"4"
],
[
"2",
"3",
"4"
],
[
"2",
"3",
"5"
]
}
答案 1 :(得分:0)
指定“dataType”是不够的。您还需要设置“contentType”。尝试将contentType: "application/json; charset=utf-8"
添加到您的请求中。
看起来应该是这样的:
$.ajax({
type : 'POST',
url : '@routes.Application.save()',
contentType: "application/json; charset=utf-8,
dataType: "json",
data: JSON.stringify(array),
success : function(data) {
console.log("success");
},
error : function() {
alert("failure")
}
});
如果您不使用UTF-8,请务必选择正确的字符集。
答案 2 :(得分:0)
在脚本部分之前定义jsRouter,之后你可以像下面这样使用它:
@scripts = {
@helper.javascriptRouter("jsRouter")(
controllers.routes.javascript.Application.save
)
<script type="application/javascript">
...
$("#save").click(function() {
...
jsRouter.controllers.Application.save().ajax({
cache: false,
method: "POST",
contentType: "application/json",
data: JSON.stringify({
...
}),
success: function(data) {
...
},
error: function(data) {
...
}
});
}
</script>
}