2013-05-11 82 views
3

在請求完成後,我試圖隱藏ajax加載器,但done()回調在blur()事件之後立即觸發,然後發出請求。我讓我的控制器動作睡了5秒,以確定是這種情況,而且是這樣。我認爲它應該只在結果從服務器返回後或5秒鐘後觸發。這是怎麼回事?jQuery done()似乎在發送請求之前觸發

$('#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" 
    ) 
+0

爲什麼沒有'alert'完成''在ajax調用的'complete'上觸發?看看文檔http://api.jquery.com/jQuery.ajax/ – Nomad101 2013-05-11 22:32:57

+0

@ Nomad101,因爲'complete','success'等是「老派」的jQuery。 – Alnitak 2013-05-11 22:33:44

+0

@Alnitak和問題是?我的意思是他們仍然按照他們應該的方式工作只是說可能是一個簡單而有效的解決方案。 – Nomad101 2013-05-11 22:34:26

回答

6

我不熟悉這個語法(CoffeeScript的?),但它看起來像你通過立即調用alert "done"xhr.done()的結果,而不是傳遞參照功能調用alert

嘗試:

xhr.done -> 
    alert "done" 

在香草JS,這是因爲如果你這樣寫:的

xhr.done(alert("done")) 

代替:

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

alert調用立即發生,而結果傳遞給xhr.done,然後它根本沒有任何用處。

+0

謝謝。而已。我會盡快讓我接受。是的,那就是CoffeeScript。 – dee 2013-05-11 22:34:42

相關問題