3

我试图在请求完成后隐藏一个 ajax 加载器,但在事件发生后,在发出请求之前,done()回调会立即触发。blur()我让我的控制器动作休眠了 5 秒钟,以确保情况确实如此。我认为它应该仅在结果从服务器返回后或 5 秒后触发。这是怎么回事?

  $('#order_billing_post_code').on 'blur', ->
    field = $(this)
    post_code = field.val()
    type = field.data 'address-type'

    if post_code.length is 8
      xhr = $.ajax
        url: "/address_lookups/new"
        data:
          post_code: post_code
        beforeSend: ->
          field.siblings('i.address-ajax-loader').show()
        success: (data) ->
          parse data, type
        dataType: "json"

      xhr.done(
        alert "done"
      )
4

1 回答 1

8

我不熟悉这种语法(Coffeescript?),但看起来您正在将调用的结果alert "done"立即传递给xhr.done(),而不是传递对调用的函数的引用alert

尝试:

xhr.done ->
  alert "done"

在 vanilla JS 中,就好像你写过:

xhr.done(alert("done"))

代替:

xhr.done(function() {
    alert("done");
});

调用立即发生,alert并将结果传递给xhr.done,然后它根本没有任何用处。

于 2013-05-11T22:32:50.730 回答