2011-03-03 45 views
6

我的Busy图标存在浏览器问题。代码如下所示:如何在ajax查询之前和之后强制DOM更新/刷新?

$("#busysymbol").show(); 
$("#busysymbol").position({my:"right top",at:"right top",of:$("#datepicker"),offset:"-3 3"}); 
var resp = $.ajax({url: "book_ajax.php?req=daysformonth&month=1", 
     cache: false, 
     async: false 
     }).responseText; 
$("#busysymbol").hide(); 
var daysInMonth = resp.split(","); 
...etc...

此代码适用于Firefox,但在Chrome和Safari中不显示繁忙符号。我相信Chrome和Safari会缓存对DOM的更改,$(“busysymbol”)。show()调用不会立即刷新。

有没有一种方法可以强制Chrome/Safari更新显示。

+0

之前'$(“#busysymbol”)隐藏();'做'警报(“你好”)'和看看会发生什么 – 2011-03-03 05:47:05

+0

添加警报('Hello')的确强制显示$(“#busysymbol”)。这很好,因为它证明程序流程是正确的,但是,如果警报不存在,DOM更新不会发生,忙碌符号将保持隐藏状态。 – 2011-03-09 02:34:45

回答

7

也许尝试使用ajaxStartajaxStop全局事件为您忙碌的象征。 例如:

$("#busysymbol").ajaxStart(function(){ 
    $(this).show(); 
}); 
$("#busysymbol").ajaxStop(function(){ 
    $(this).hide(); 
}); 

在您的代码的开头,并删除隐藏和从特定阿贾克斯表示()的处理程序。

哦,我刚刚注意到你正在使用同步请求,所以它甚至不是AJAX - 更像SJAX。当您等待请求完成或超时时,您是否有充分理由完全阻止浏览器的用户界面?如果没有,那么请尝试使用这样的:

$("#busysymbol").hide(); 
$("#busysymbol").ajaxStart(function(){ 
    $(this).show(); 
}); 
$("#busysymbol").ajaxStop(function(){ 
    $(this).hide(); 
}); 
var resp = $.ajax({url: "book_ajax.php?req=daysformonth&month=1", 
     cache: false, 
     success: function (resp) { 
      var daysInMonth = resp.split(","); 
      ...etc... 
     } 
}); 

(未测试)

尝试,如果它不工作重新定位#busysymbol,然后尝试在一开始添加正确的定位。请记住.position()不会带有参数,因此代码中最长的一行实际上没有做任何事情 - 请参阅the docs。你需要的是.offset().css()

+0

嗨rsp,感谢您的建议。这似乎是同步请求的问题。我将ajaxStart()和ajaxStop()添加到$(“#busysymbol”)中,它适用于页面上的所有其他异步查询,但不适用于同步的查询(对于Safari和Chrome,无论如何,Firefox似乎还行)。 – 2011-03-09 02:30:10

+0

想不到一种方法来解决同步问题。 ajax用于返回值的函数,需要ajax完成才能返回。 – 2011-03-09 02:32:00

+0

有趣的是,你提到.position()不会带任何参数。
当查找函数
时,我去了http://jqueryui.com/demos/position/这些文档说有几个arguemetns,并且我看到了在所有浏览器中都可以使用该功能的证据。 – 2011-03-09 02:44:31

0

我认为Chrome和Safari正在同步执行您的Ajax请求,尽管标记为aynch。要解决这个问题,你可以隐藏在AJAX功能的这样一个回调的图标:

$.ajax({ 
    url: 'book_ajax.php?req=daysformonth&month=1', 
    success: function(data) { 

    $("#busysymbol").hide(); 

    } 
}); 
+1

注意:这个人有“异步:错误”,所以这是告诉它同步做到这一点。所以他们这样做是因为异步标志,而不是尽管它。 – jlarson 2011-11-07 17:05:33