【问题标题】:Coffeescript Promise with Jquery PostCoffeescript Promise 与 Jquery Post
【发布时间】:2013-07-10 02:28:40
【问题描述】:

我有一个负责将用户注册表单发送到我的服务器的 emberjs 控制器。这在大多数情况下都可以正常工作,但我正在尝试利用 Promise,以便我可以进行一些错误检查、重定向等。

sendRegistration: () ->
  $.post('/api/v1/users', 
    user:
      email: @email,
      password: @password,
      password_confirmation: @passwordConfirmation
    ).then (response) ->
      alert('Hi!')

这或多或少是正确的,因为帖子被发送到服务器,并且服务器以适当的状态代码响应,但 then 永远不会执行,大概是因为返回了帖子的结果。我的咖啡脚本有什么遗漏吗?

【问题讨论】:

  • 也尝试添加错误处理程序。其中一个肯定会被处决。
  • 顺便说一句,你应该在回调中添加一个return response,否则该方法将返回一个undefined的承诺
  • 您可以使用coffeelint.org检查您的coffeescript合成器或使用js2coffee.org将javascript转换为coffeescript。

标签: javascript jquery ember.js promise


【解决方案1】:

我想要使用 jQuery 的延迟对象,你应该像这样定义你的发布请求:

sendRegistration: () ->
  $.post('/api/v1/users', 
    user: '',
    email: @email,
    password: @password,
    password_confirmation: @passwordConfirmation
  )
  .done (response) ->
    alert('Hi!')
  .fail (jqHXR, textStatus) ->
    alert('error')

来自docs的备注:

从 jQuery 1.5 开始,fail 和 done 以及从 jQuery 1.6 开始,回调钩子总是先进先出的托管队列,允许每个钩子有多个回调。见Deferred object methods

希望对你有帮助。

【讨论】:

    【解决方案2】:

    只需使用.post 回调:

    sendRegistration: () ->
      $.post('/api/v1/users', 
        user:
          email: @email,
          password: @password,
          password_confirmation: @passwordConfirmation
        , (response) ->
          alert('Hi!')
        );
    

    【讨论】:

    • 同样的结果。响应回来了,警报永远不会触发
    • @DVG 然后,jQuery 不会将请求/响应视为“成功”。如上所述,添加一个failCallback(参数匹配error optionfunction (jqXHR, status, error))。
    猜你喜欢
    • 2013-07-02
    • 2013-07-04
    • 2013-08-19
    • 2016-07-15
    • 2012-09-22
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    相关资源
    最近更新 更多