2011-05-15 201 views
6

我需要調用一個返回ajax調用內容的javascript函數。blockUI vs ajax with async option to false

爲了達到這個結果,我在ajax調用中將async選項設置爲false。

 
function ajaxQuery(){ 
    var content; 
    $.ajax({ 
     url: "blabla.html, 
     async: false, 
     success: function(data){ 
      content = data 
     } 
    }); 
    return content; 
} 

不幸的是,將async選項設置爲false會使blockUI無法正常工作。 在查詢服務器期間,瀏覽器被凍結而沒有消息。

如果我將async選項設置爲true,blockUI會正常工作,但是我的javascript函數返回的值未定義,可能是因爲ajax查詢未完成。

如何在javascript函數中解決這個問題,以獲得使ajax調用使blockUI工作的內容?

感謝,

安東尼

+3

每天至少要問這個問題五次。 – SLaks 2011-05-15 15:10:15

回答

7

你不能。

同步AJAX調用將完全凍結瀏覽器,應該不惜一切代價避免;這是沒有辦法的。

取而代之,您應該使用回調傳遞值,與$.ajax一樣。

1

你的問題是你在最後返回內容;相反,在你註冊的成功回調中修改dom(或者調用一個函數)。您可能想要註冊一個錯誤回調以及在服務器返回200以外的值時執行某些操作。

1

顯示正在加載...直到獲得響應的狀態消息。

4

問題與此代碼是數據傳遞到回調的代碼

return content; 

因此這部分在此之前一個

success: function(data){ 
     content = data 
    } 

這是不確定的回報原因將被excecuted一段時間。

那怎麼辦?

function contentParse(data){ 
    //do things with data received 
} 

$.ajax({ 
    url: "blabla.html", 
    success: function(data){ 
     contentParse(data); 
    } 
}); 

至少我是這麼做的。祝你好運。

0

禁用所有其他控制,直到一個操作完成