我很想做一件简单的事情,用ajax,发送请求(使用GET或POST)。
我将以json格式发送2个参数,我只是想让它们返回并发送响应,仍然,我总是得到错误400和其他我不知道什么是错的,任何想法如何?
我的开篇基于这篇文章:http://fruzenshtein.com/spring-mvc-ajax-jquery/
我正在使用spring mvc。
到目前为止,我有这个:
$(".update_agent").live('click', function(){
var agent = { "agentId" : agentID, "hostAGent" : hostID};
//send ajax
$.ajax({
url: url,
data: JSON.stringify(agent),
type: "GET",
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
},
success: function(data) {
alert("success");
},
error: function(){
alert("error");
}
});
})
在我的java控制器上我有这个
@RequestMapping(value = "/update", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public int updateAgent(HttpServletRequest req, HttpServletResponse res) throws IOException{
req.getParameterValues("agentId");
return AGENT_UPDATE_SUCCESS;
}
但我无法回复,不知道如何提出参数的请求,任何想法?
感谢。
===================== UPDATE ========================= ===
我改变了代码,看起来像......
$.ajax({
headers: {
"Accept": "application/json",
"Content-Type": "application/json"
},
type: 'POST',
url: url,
data: JSON.stringify(agent),
dataType: 'json',
success:function(data) {
alert("success");
},
error: function(){
alert("error");
}
});
在我的控制器上
@RequestMapping(value = "/update", method = RequestMethod.POST)
public @ResponseBody Integer updateAgent(@RequestBody String param) throws IOException{
System.out.println(param);
//do something...
return 1;
}
问题是我收到错误415,媒体类型不支持,有什么建议?
答案 0 :(得分:1)
GET-request不能有'data'-field。您需要将数据作为网址的一部分发送:
$.ajax({
url: url + "?agent=" + JSON.stringify(agent),
type: "GET",
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
},
success: function(data) {
alert("success");
},
error: function(){
alert("error");
}
});
现在您可以将控制器中的数据作为:
@ResponseBody public ResponseEntity<String> updateAgent(@RequestParam(value = "agent") String agentJson){
...
}
或者您可以发送POST请求。通过POST请求,您可以将数据发送为requestBody
:
public @ResponseBody ResponseEntity<String> updateAgent(@RequestBody String agentJson){
...
}
编辑:
创建一个新的Agent
- 类:
public class Agent {
private long agentId;
private long hostAgent;
...
getter and setter
...
}
现在将控制器更新为:
public @ResponseBody ResponseEntity<String> updateAgent(@RequestBody Agent agent){
System.out.println(agent.getAgentId());
}
并将ajax-call的“Content-Type”更改为“application / json”。
EDIT2: 将您的ajax呼叫数据更改为:
data: { agentId: agentID, hostAgent : hostAgentID} ,
甚至
data: agent ,
不要忘记在您的座席对象中将“hostAGent”更改为“hostAgent”,否则您将获得400!
现在ajax会将数据作为请求参数发送,您可以通过以下方式获取控制器中的数据:
public @ResponseBody ResponseEntity<String> updateAgent(@RequestParam(value = "agentId") long agentId, @RequestParam(value = "hostAgent") long hostAgentId){
System.out.println(agentId);
}