2010-01-25 67 views
1

我有這樣的腳本:jQuery的AJAX裝載機

$("#addk").bind("click", function(event){ 
     //alert("here!"); 
     $("#loader-overlay").show(); 
     $.ajax({ 
      'async':"False", 
      'type': "POST", 
      'url': "http://url/feedback/", 
      'data': $("#form").serialize(), 
      'success': function(msg){ 
       $("#errors").html(msg); 
       }, 
      'error' : function(){ 
       $("#errors").html('<p>fail</p>'); 
      } 
     }); 
     $("#loader-overlay").hide(); 
     //return false; 
    }); 

出於某種原因,永遠不會出現在加載程序屏幕,即使AJAX運行幾秒鐘。如果我寫

$("#loader-overlay").show(); 

到控制檯,然後它工作得很好。

它可能是非常簡單的東西,我只是不能把我的手指。

艾倫

回答

8

你或許應該有顯示和加載的隱藏作爲Ajax請求中的回調。退房:http://api.jquery.com/jQuery.ajax/#callback-functions

所以,你可以這樣做:。

$.ajax({..., beforeSend: function(){ /* show the loading thing */ }, 
    complete: function(){ /* hide the loader */ }}); 
+0

那正是我需要的感謝 – 2010-01-25 21:32:03

+0

我不認爲這會爲異步工作=假電話 – mprabhat 2012-02-16 06:05:13

+0

在這種情況下,那麼他的原始方法不會工作得很好嗎?另外,爲什麼要禁用異步? – Eli 2012-02-17 22:00:45

1

您的代碼基本上是正確的,你正在嘗試做一個同步調用,這樣的Ajax調用後的代碼應執行的AJAX調用返回,只有當。但你有一個小錯誤。試試這個:

async: false 

使用"false"等於true,因爲它是一個非零長度字符串,因此你將有一個異步調用,並在Ajax調用開始–它不會等待之後裝載機立即隱藏通話完成。

而且,你不需要引用鑰匙,因此這種風格也將工作:

$.ajax({ 
    async: false, 
    type: "POST", 
    url: "http://url/feedback/", 
    .... 

但是,爲什麼你甚至需要撥打電話同步?進行同步呼叫會在呼叫期間掛起所有其他進程,因此可能會分散注意力。如果你表現出Ajax調用之前加載元素,然後再次把它隱藏在success處理程序,它應該還好吧工作:

$("#addk").click(function(event) { 
    $("#loader-overlay").show(); 
    $.ajax({ 
     type: 'POST', 
     url: 'http://url/feedback/', 
     data: $("#form").serialize(), 
     success: function(msg){ 
      $("#errors").html(msg); 
      $("#loader-overlay").hide(); 
     }, 
     error: function() { 
      $("#errors").html('<p>fail</p>'); 
     } 
    }); 
    return false; 
}); 
+0

感謝有關「繞假:)尖端 – 2010-01-25 21:33:02