【问题标题】:Callback not executing from jQuery post回调未从 jQuery post 执行
【发布时间】:2012-05-26 16:53:51
【问题描述】:

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

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

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

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

问题是:

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

【问题讨论】:

    标签: jquery post callback


    【解决方案1】:

    您的代码很好,除了它没有挂钩错误处理程序(我不喜欢$.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 因为使用 $.ajax 几乎总是更可取,这正是您指定的原因。
    • 嗯,它正在警告“错误”。我们能以某种方式了解错误的详细信息吗?
    • @jacekn:您可能已经看过答案的早期副本;刷新,有更多信息可用(或参考ajax docs)。但最好的信息来自浏览器的调试器。如果您使用的是任何现代、优质的浏览器,它要么内置了相当不错的调试器(列出了网络操作,包括内容),要么作为附加组件提供(Firebug,在 Firefox 的情况下)。 Chrome、Safari 和 Opera 都内置了非常好的。IE8 和更高版本也可以接受。
    • 好的,我明白了。错误详细信息给了我重要信息。谢谢你,先生!
    【解决方案2】:

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

    function update_qty(variant_id, qty){
      $.post('/cart/update.js', "updates["+variant_id+"]="+qty, function(data){
        updateCartDesc(data);
      }, "json");
    }
    

    【讨论】:

    • 这对我有用,我将对象作为数据发送。
    【解决方案3】:

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

    【讨论】:

    • 不,如果它是一个脚本,它的类型是 application/javascript。 application/json 用于 json。破解 mime 类型只会破坏浏览器文档模型
    • @Shayne 没有人说这是一个脚本。从那个基座上下来。 :)
    • 现在你编辑了你的帖子,当然。但在此之前,它几乎就是你所说的。
    【解决方案4】:

    为了可读性,我建议忽略上述正确答案。 从 JQuery 1.5(或更高版本,在问题的情况下)使用:

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

    如 JQuery 文档中所述:https://api.jquery.com/jquery.post/
    从文档中看不是很清楚,但是您可以从发布请求中获取返回的“jqXHR”对象作为 always、fail 和 done 函数的参数。

    您可以根据需要将参数扩展至:

    .always(function(responseArray, request, jqxhr, status, error) {
        alert( jqxhr.responseText );
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 2011-08-22
      • 2022-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多