【问题标题】:jQuery's .done() and .always() never getting calledjQuery 的 .done() 和 .always() 永远不会被调用
【发布时间】:2013-07-15 04:13:19
【问题描述】:

我正在尝试进行简单的 ajax api 调用,但我的 jQuery .done().always() 回调永远不会运行,即使在成功调用之后也是如此。

这里是我调用 api 的地方:

join: (e) ->

    e.preventDefault()
    email = $('.email').val()

    $.ajax(
      type: 'POST'
      url: '/api/email'
      data: { email: email }
    ).done((msg) ->
      console.log 'POST success'
      console.log msg
    ).always((msg) ->
      console.log 'Always'
    )

这是来自我的控制器的post

app.post '/api/email', (req, res) ->

    console.log req.body

我的服务器正确接收来自 api 调用的数据,但我的 jQuery 回调从未被触发的问题。

{ email: 'test@email.com' } // What gets logged server-side

编辑

所以我尝试添加一个.fail() 方法并稍微切换代码以查看我的语法是否错误,但是这个新代码仍然像旧代码一样运行。

request = $.ajax(
  type: 'POST'
  url: '/api/email/beta'
  data: { email: email }
)

request.done( (msg) ->
  console.log 'POST success'
  console.log msg
)

request.fail( (msg) ->
  console.log 'POST Fail'
  console.log msg
)

request.always( () ->
  console.log 'Always'
)

编辑 2

我刚刚意识到POST 实际上是“失败的”,但是在 4.1 分钟之后......但奇怪的是我仍然在 req.body 对象中获取数据......?

这是来自 chrome 工具的网络截图:

【问题讨论】:

  • 你有没有尝试捕捉“失败”?
  • 什么是响应状态以及控制台中的任何错误
  • @tilix,看看编辑
  • @ArunPJohny,chrome 工具或我的控制台都没有错误。记录的内容是:{ email: '' },这是预期的,因为这是我通过网络发送的内容
  • @ConnorBlack:你的服务器在哪里响应?网络检查员会告诉你什么?

标签: javascript api jquery coffeescript


【解决方案1】:

看起来您在服务器上收到了请求(并记录了它),但随后不做任何事情。这最终会导致超时。改成

app.post '/api/email', (req, res) ->
    console.log req.body
    res.write(JSON.stringify({success:true})/* or whatever*/);
    res.end();

也许你在 res 对象上使用了一些带有特殊方法的框架;如果是这样,请查看其有关如何回答请求的文档。

【讨论】:

  • 做到了。我正在使用快递,不知道我必须明确结束请求。不过谢谢!
  • 啊,那么 res.send 应该这样做; afaik no end 那里需要。
【解决方案2】:

试试这样:

$.ajax({
      type: 'POST'
      url: '/api/email'
      data: { email: email}
    }).done((msg) ->
      console.log 'POST success'
      console.log msg
    ).always((msg) ->
      console.log 'Always'
    )

【讨论】:

  • coffeescript 中大括号是可选的,但我确实尝试过,代码仍然表现相同。
猜你喜欢
  • 2015-06-30
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 2012-10-27
  • 2013-10-12
  • 2012-03-27
  • 2013-08-29
  • 2013-11-03
相关资源
最近更新 更多