2011-03-03 74 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