7

我在执行回调函数时遇到问题。

$.post("/" + contentId + "/postComment", {
    "postComment": ""
}, function(data) {
    alert('call back');
});

这个帖子确实发生了。但是,不会调用警报。

这篇文章导致一些xml返回。我无法确切地说出它的外观,因为我正在使用Spring映射,application/xml@RequestBody我只是不知道 Spring 对我返回的内容做了什么。我这样说是为了以防服务器响应的内容会以某种方式影响回调。

问题是:

我需要做什么才能在我的代码示例中看到该警报?

4

4 回答 4

25

您的代码很好,除了它没有挂钩错误处理程序(我不喜欢的原因之一$.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
        );
  }
});

...所以你可以看到错误是什么。

于 2012-05-26T16:56:59.393 回答
6

有一个类似的问题,当您提供字符串作为数据并且服务器返回 JSON 响应时,回调不会触发。为了解决这个问题,只需将数据类型明确指定为 JSON:

function update_qty(variant_id, qty){
  $.post('/cart/update.js', "updates["+variant_id+"]="+qty, function(data){
    updateCartDesc(data);
  }, "json");
}
于 2017-10-02T12:05:37.343 回答
0

我注意到 ajax 脚本需要有一个内容类型application/json而不是application/javascript,如果它确实是 JSON。

于 2015-01-03T03:08:51.523 回答
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 );
});
于 2018-10-15T17:21:28.423 回答