2010-01-25 49 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