我用 JQuery 2.0.3 这样做了一个 http post:
$.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数据的 Controller 代码为
@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成功接收或提交失败的回调?它可以提交数据,但来自服务器的响应“已接收 JSON 数据”
不会执行任何操作,这与 void
的 Controller 方法没有区别并且只写入数据,没有return
语句。您能否提出改进建议,以便发布数据的 JavaScript 也能收到响应,如果出现服务器错误,我认为该响应将是状态 200 OK 或状态 500 或类似的响应?
根据@Oleg Etekhin 的回答,它应该更像这样:
$.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 将 Controller 代码更改为响应对象
@RequestMapping(value = "/submitTransactions2", method = RequestMethod.POST, headers = {"content-type=application/json"}) @ResponseBody @事务性 public AccountResponse SubmitTransactions2(@RequestBody @Valid Final String string) { 尝试 { PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(文件名, true))); out.println("\n"+字符串); 关闭(); } catch (IOException e) { LOGGER.severe("IOException"); e.printStackTrace(); } LOGGER.info("收到的交易"+string); return new AccountResponse("已收到交易", "已收到", "已收到", "已收到"); }
然后我得到回复“完成!”来自服务器(但当仅使用字符串而不使用 jackson 时,我得到响应“失败”。
根据第二个答案更新后,此更改似乎有效:
$.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
.
最佳答案
首先,根据 jQuery ajax文档中包含失败回调的属性称为“错误”,因此您的示例应如下所示:
$.ajax({
// other properties
success: function(data){alert(data);},
error: function(errMsg) {alert(errMsg);}
});
其次,自 jQuery 1.8 起,“成功”、“错误”和“完成”回调被视为已弃用,您应该使用 Promise 风格的变体:
$.ajax({
// other properties
})
.done(function(data){alert(data);})
.fail(function(errMsg) {alert(errMsg);});
关于java - 如何使用 JQuery 处理 Ajax http post 的成功和失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21969429/