我在执行回叫功能时遇到问题。
$.post("/" + contentId + "/postComment", {
"postComment": ""
}, function(data) {
alert('call back');
});
这篇文章确实发生了。但是,不会调用警报。
此帖子会返回一些xml
。我无法确切地说出它的外观,因为我正在使用application/xml
和@RequestBody
的 Spring 映射,我只是不知道Spring对我做了什么回来了。我这样说是为了防止服务器响应的内容以某种方式影响回叫。
问题是:
答案 0 :(得分:23)
你的代码很好,除了它没有挂钩错误处理程序(我不喜欢$.post
的原因之一)。我认为POST操作必然会导致错误。尝试将其转换为:
$.ajax({
type: "POST",
url: "/"+contentId+"/postComment",
data: {"postComment":""},
success: function(data) {
alert('call back');
},
// vvv---- This is the new bit
error: function(jqXHR, textStatus, errorThrown) {
alert("Error, status = " + textStatus + ", " +
"error thrown: " + errorThrown
);
}
});
...所以你可以看到错误是什么。
答案 1 :(得分:3)
有一个类似的问题,当你提供一个字符串作为数据并且服务器返回一个JSON响应时,回调不会触发。要解决此问题,只需将数据类型显式指定为JSON:
function update_qty(variant_id, qty){
$.post('/cart/update.js', "updates["+variant_id+"]="+qty, function(data){
updateCartDesc(data);
}, "json");
}
答案 2 :(得分:0)
我注意到ajax脚本需要的内容类型为application/json
,而不是application/javascript
,如果它确实是JSON。
答案 3 :(得分:0)
出于可读性考虑,我建议忽略上述正确答案。 从JQuery 1.5(或更高版本,在出现问题的情况下)开始,使用:
$.post("/" + contentId + "/postComment", {
"postComment": ""
}).always(function() {
alert('call back');
});
如JQuery文档所述:https://api.jquery.com/jquery.post/
从文档中还不清楚,但是您可以从post请求中获取返回的“ jqXHR”对象作为始终,失败和完成功能的参数。
您可以根据需要将参数扩展到:
.always(function(responseArray, request, jqxhr, status, error) {
alert( jqxhr.responseText );
});