jQuery done() 似乎在发送请求之前触发

标签 jquery ajax coffeescript

我试图在请求完成后隐藏 ajax 加载器,但是 done() 回调在 blur() 事件之后、在提出请求。我让 Controller Action 休眠 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"
      )

最佳答案

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

尝试:

xhr.done ->
  alert "done"

在普通 JS 中,就好像你写了:

xhr.done(alert("done"))

而不是:

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

alert 调用会立即发生,结果会传递给 xhr.done,然后它就不会执行任何有用的操作。

关于jQuery done() 似乎在发送请求之前触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16502305/

相关文章:

php - jquery.post 不创建 session

jquery - HTML5 JavaScript 在 Chrome 中粘贴图像数据

javascript - Rails 4 x simple_calendar gem : create new record on click in calendar cell

用于动态内容的 jQuery 文件另存为对话框

javascript - Backbone 按 ID 删除行

javascript - 触发点击具有多个类的元素

javascript - 删除 jQuery.ajaxSetup 中设置的特定请求 header

javascript - jQuery的removeClass和addClass不工作

compilation - 用自身编译 CoffeeScript

javascript - Jquery 追加输入元素并从该输入元素发送数据