回调没有从jQuery帖子执行

时间:2012-05-26 16:53:51

标签: jquery post callback

我在执行回叫功能时遇到问题。

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

这篇文章确实发生了。但是,不会调用警报。

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

问题是:

在我的代码示例中,我需要做些什么来查看该警报?

4 个答案:

答案 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 );
});