【发布时间】:2014-03-25 00:48:16
【问题描述】:
我以这种方式使用 JQuery 2.0.3 发布 http 帖子:
$.ajax({
type: "POST",
url: "/demo/submitTransactions",
data: JSON.stringify({ ConfirmedTransactions: confirmedTransactions }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){alert(data);},
failure: function(errMsg) {
alert(errMsg);
}
});
json 在服务器上发布和写入,但响应 success: 和 failure: 未启用 AFAIK。接收到json数据的控制器代码是
@RequestMapping(value = "/submitTransactions", method = RequestMethod.POST, headers = {"content-type=application/json"})
@ResponseBody
@Transactional
public String submitTransactions(@RequestBody @Valid final String string) {
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(filename, true)));
out.println("\n"+string);
out.close();
} catch (IOException e) {
LOGGER.severe("IOException");
e.printStackTrace();
}
LOGGER.info("Received transactions "+string);
return "Received JSON data";
}
如何让成功和失败也能得到发布的json接收成功或提交失败的回调?它可以提交数据,但来自服务器"Received JSON data" 的响应没有做任何事情,这与void 的控制器方法之间没有区别,并且只写入没有returnstatement 的数据。您能否提出改进建议,以便发布数据的 javascript 也收到响应,如果出现服务器错误,我认为状态可能是 200 OK 或状态 500 或类似的响应?
根据@Oleg Estekhin 的回答,应该更像这样:
$.ajax({
type: "POST",
url: "/demo/submitTransactions",
data: JSON.stringify({ ConfirmedTransactions: confirmedTransactions }),
contentType: "application/json; charset=utf-8",
dataType: "json"
})
.done(function(data){alert('Done!'+data);})
.fail(function(errMsg) {alert('Failure!'+errMsg);});
现在,如果我还使用 jackson 将控制器代码更改为响应对象
@RequestMapping(value = "/submitTransactions2", method = RequestMethod.POST, headers = {"content-type=application/json"}) @ResponseBody @Transactional public AccountResponse submitTransactions2(@RequestBody @Valid final String string) { 尝试 { PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(filename, true))); out.println("\n"+string); out.close(); } 捕捉(IOException e){ LOGGER.severe("IOException"); e.printStackTrace(); } LOGGER.info("收到的交易"+string); return new AccountResponse("Received transactions", "Received", "Received", "Received"); }
然后我得到响应“完成!”来自服务器(但是当我只使用一个字符串而不使用杰克逊时,我得到了“失败”的响应。
根据第二个答案更新后,这个改动好像生效了:
$.ajax({
type: "POST",
url: "/demo/submitTransactions",
data: JSON.stringify({ ConfirmedTransactions: confirmedTransactions }),
contentType: "application/json; charset=utf-8",
dataType: "text"
})
.done(function(data){alert('Done!'+data);})
.fail(function(errMsg) {alert('Failure!'+errMsg);});
它有效。 ives 已返回String
.
【问题讨论】:
标签: java jquery json spring jackson