Java 如何使用JQuery处理Ajax http post的成功和失败?
我使用JQuery 2.0.3以这种方式发布http帖子:Java 如何使用JQuery处理Ajax http post的成功和失败?,java,jquery,json,spring,jackson,Java,Jquery,Json,Spring,Jackson,我使用JQuery 2.0.3以这种方式发布http帖子: $.ajax({ type: "POST", url: "/demo/submitTransactions", data: JSON.stringify({ ConfirmedTransactions: confirmedTransactions }), contentType: "application/json; charset=utf-8",
$.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会在服务器上发布和写入,但是响应成功:
和失败:
不会被启用。接收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";
}
我怎样才能使success和failure获得已发布的json成功接收或提交失败的回调?它可以提交数据,但是来自服务器的响应“Received JSON data”没有任何作用,这与控制器方法没有区别,控制器方法是void
,只写数据,而不使用return
语句。您是否可以提出一个改进建议,以便发布数据的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);});
$.ajax({
// other properties
success: function(data){alert(data);},
error: function(errMsg) {alert(errMsg);}
});
$.ajax({
type: "POST",
url: "/demo/submitTransactions",
data: JSON.stringify({ ConfirmedTransactions: confirmedTransactions }),
contentType: "application/json; charset=utf-8",
dataType: "text"
})
.done(function(data){alert(data);})
.fail(function(errMsg) {alert(errMsg);})
;
现在,如果我还使用jackson将控制器代码更改为响应对象
@RequestMapping(value=“/submitTransactions2”,method=RequestMethod.POST,headers={“content type=application/json”})
@应答器
@交易的
public AccountResponse submitTransactions2(@RequestBody@Valid final String){
试一试{
PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(filename,true));
out.println(“\n”+字符串);
out.close();
}捕获(IOE异常){
严重(“IOException”);
e、 printStackTrace();
}
LOGGER.info(“收到的交易”+字符串);
返回新的AccountResponse(“已接收交易”、“已接收”、“已接收”、“已接收”);
}
然后,我从服务器得到响应“Done!”(但是当只使用字符串而不使用jackson时,我得到响应“failed”)
根据第二个答案进行更新后,此更改似乎有效:
$.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);});
它可以工作。返回String
.首先,根据文档,包含故障回调的属性称为“error”,因此您的示例应如下所示:
$.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);});
$.ajax({
// other properties
success: function(data){alert(data);},
error: function(errMsg) {alert(errMsg);}
});
$.ajax({
type: "POST",
url: "/demo/submitTransactions",
data: JSON.stringify({ ConfirmedTransactions: confirmedTransactions }),
contentType: "application/json; charset=utf-8",
dataType: "text"
})
.done(function(data){alert(data);})
.fail(function(errMsg) {alert(errMsg);})
;
第二,“success”、“error”和“complete”回调自jQuery 1.8以来被认为是不推荐使用的,您应该使用promise样式的变体:
$.ajax({
// other properties
})
.done(function(data){alert(data);})
.fail(function(errMsg) {alert(errMsg);});
$.ajax({ ... })
.done(...)
.fail(...);
首先,根据文档,包含故障回调的属性称为“error”,因此您的示例应如下所示:
$.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);});
$.ajax({
// other properties
success: function(data){alert(data);},
error: function(errMsg) {alert(errMsg);}
});
$.ajax({
type: "POST",
url: "/demo/submitTransactions",
data: JSON.stringify({ ConfirmedTransactions: confirmedTransactions }),
contentType: "application/json; charset=utf-8",
dataType: "text"
})
.done(function(data){alert(data);})
.fail(function(errMsg) {alert(errMsg);})
;
第二,“success”、“error”和“complete”回调自jQuery 1.8以来被认为是不推荐使用的,您应该使用promise样式的变体:
$.ajax({
// other properties
})
.done(function(data){alert(data);})
.fail(function(errMsg) {alert(errMsg);});
$.ajax({ ... })
.done(...)
.fail(...);
如Oleg Estekhin在回答中所述,要使用的正确属性是
error
。此外,您还应使用promise变体:
$.ajax({
// other properties
})
.done(function(data){alert(data);})
.fail(function(errMsg) {alert(errMsg);});
$.ajax({ ... })
.done(...)
.fail(...);
接下来,您应该将dataType
更改为text
,以便jQuery知道返回的值将被解析为普通文本而不是JSON。这将导致调用成功回调。最后的代码如下所示:
$.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);});
$.ajax({
// other properties
success: function(data){alert(data);},
error: function(errMsg) {alert(errMsg);}
});
$.ajax({
type: "POST",
url: "/demo/submitTransactions",
data: JSON.stringify({ ConfirmedTransactions: confirmedTransactions }),
contentType: "application/json; charset=utf-8",
dataType: "text"
})
.done(function(data){alert(data);})
.fail(function(errMsg) {alert(errMsg);})
;
如Oleg Estekhin在回答中所述,要使用的正确属性是
error
。此外,您还应使用promise变体:
$.ajax({
// other properties
})
.done(function(data){alert(data);})
.fail(function(errMsg) {alert(errMsg);});
$.ajax({ ... })
.done(...)
.fail(...);
接下来,您应该将dataType
更改为text
,以便jQuery知道返回的值将被解析为普通文本而不是JSON。这将导致调用成功回调。最后的代码如下所示:
$.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);});
$.ajax({
// other properties
success: function(data){alert(data);},
error: function(errMsg) {alert(errMsg);}
});
$.ajax({
type: "POST",
url: "/demo/submitTransactions",
data: JSON.stringify({ ConfirmedTransactions: confirmedTransactions }),
contentType: "application/json; charset=utf-8",
dataType: "text"
})
.done(function(data){alert(data);})
.fail(function(errMsg) {alert(errMsg);})
;
谢谢你的回答。我使用JQuery 2.0.3并用这个更新答案。谢谢你的回答。我使用JQuery 2.0.3并用这个更新答案。