我试图在请求完成后隐藏 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/