【问题标题】:jQuery .done not firing on a $.post requestjQuery .done 没有在 $.post 请求上触发
【发布时间】:2014-06-23 20:18:16
【问题描述】:

首先,这是我的示例代码:

$.post( "test.php", { testdata : "signal" },
            function( data ) { alert( "Nested function" )})
 .done( function () { alert( "Done function" )});

我正试图让.done 为我完成一些事情,没关系。无论我是否将函数直接嵌套在$.post 参数中,它都不会触发。在 Chrome 上检查控制台显示它正在抛出 Uncaught TypeError: undefined is not a function 的错误

玩弄线条和错误报告告诉我,肯定是.done 引发了错误,并且简单地将.done 直接移动到$.post 的关闭括号之后是无效的。

我看到了另一个similar question,但它是针对$.ajax 的,我已经尝试实现他们建议的链接,如上所述,但没有效果。我错过了什么?

编辑:jQuery版本是1.4.4,.post成功返回数据,.always也失败。

【问题讨论】:

  • 您是否在文档就绪函数中并确定 jQuery 库已成功加载?您使用的是什么版本的 jQuery?帖子是否可能失败并且您正在进入失败回调?你能在 always 回调中记录一些东西吗?
  • 这里似乎可以正常工作jsfiddle.net/2LgMg
  • 我使用的是 jQuery 1.4.4。发布成功并返回数据。 .always 也拒绝开火。
  • @EmmettR。 Deferredsrelated methods 是在 jQuery 1.5 中添加的。您需要升级才能使用 .done().always() 等。
  • 在 1.4.4 版本中尝试属性 success 像这样 $.post("test.php", { testdata: "signal", success: function(data) {}});

标签: javascript jquery ajax post


【解决方案1】:

改用.complete

$.post("test.php", { testdata : "signal" }, function () { 
        alert("Nested function"); })
    .complete(function () { alert("Done function"); });

fiddle

【讨论】:

  • 注意:jqXHR.complete() 是在 1.5 和 deprecated with 1.8 中引入的。
  • 它在 1.4.4 中也不可用,因为我已经测试过了。
  • @EmmettR。你确定吗?检查here 并查找(CTRL + F)“ajaxComplete”。它返回两个事件列表...
  • @War10ck 虽然,这不是这个答案所指的。 jqXHR.complete().always() 的短暂 (1.5.x - 1.7.x) 别名,用于 jqXHR 对象。
【解决方案2】:

所以,经过调查,多亏了 Jonathan Lonowski、algorhythm 和 War10ck 的 cmets,我找到了解决方案。

我运行的 jQuery 版本 1.4.4 不支持 .done、.fail、.always 或 .complete* 方法。要在成功后触发事件,我需要遵循以下内联格式:

$.post( url [, data ] [, success ] [, dataType ] )

...在 url 之后插入通常会进入 .done 的函数。这就是我在原始示例中对嵌套函数所做的事情,只需要我删除 .done 函数。

谢谢大家。

*.complete 在最近的 jQuery 版本中也被弃用了。永远不要使用它。

【讨论】:

    猜你喜欢
    • 2013-05-06
    • 1970-01-01
    • 2020-08-09
    • 2020-05-01
    • 2014-12-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多