2013-05-08 61 views
-3

我有一個函數,當我的自定義控件加載時會被調用。請參考下面的代碼。

function load() 
{ 
getdata(); 
} 

function getdata() 
{ 

    $. ajax({ 
url://remote url, 
type:"get", 
success:function(data) 
{ 
//going to set the data to my control 
} 

}); 
} 

如此成功的回調函數需要一段時間才能恢復「數據」(即獲取遠程URL數據),但負載()客戶端的方法被完成,並盡我們的控制渲染。所以我想load()方法需要等到成功函數從遠程URL返回數據,然後load()函數完成,然後我將根據數據呈現我們的控件。

如何做load()函數需要等待回調完成。

感謝,

溼婆

+1

直接回答你的問題是,你要異步添加:假到AJAX請求,讓瀏覽器等待請求完成。實際上,您希望以不需要這樣做的方式構建您的應用程序,因爲您正在與JavaScript的基於事件的本質以及AJAX的美妙作鬥爭,因爲您希望它適合您的代碼。 – 2013-05-08 17:10:37

+0

感謝您的答覆。將檢查 – SivaRajini 2013-05-08 17:22:17

+0

沒有辦法使函數x等待函數y在返回之前完成。 – 2013-05-08 17:42:00

回答

4

1)將客戶端繪製代碼的成功處理程序的內部...

2)分離成另一種方法,並呼籲從成功處理程序。

這兩種方法都將解決您的加載函數完成問題,並導致您的UI在數據返回之前呈現。

+2

這是你給出的兩個完全有效的答案,你已經評論過相同的東西。我冒昧地說,我會採取倒退,只是爲了表明你無緣無故拒絕有效的答案。您的規格充其量只是參差不齊,並且您的要求已經填滿。如果你告訴我爲什麼這是一個不好的答案,我會刪除這個。 – 2013-05-08 17:24:27

+1

甚至這個答案:http://stackoverflow.com/a/16446618/1257652幾乎說我是確切的東西。所以,要麼你不夠具體,或者你需要重新提出你的問題。 – 2013-05-08 17:26:02

+1

@SivaRajini要麼你要求澄清或解釋爲什麼這個解決方案不適合你。只是在哭「糟糕的解決方案」並不能幫助任何人給你一個更好的答案。 – JJJ 2013-05-08 17:31:49

1

您可以創建負載()這樣的回調函數..

function load() 
{ 
    getdata(function(data){ 
     alert('done') 
     // do something with data    
    }); 

} 

function getdata(cb) 
{ 

    $. ajax({ 
    url:"..", 
    type:"get", 
    success:function(data) 
    { 
     //send data back to load 
     cb(data); 
    } 

    }); 
} 

load(); 
+0

我如何發回數據加載到這裏。 – SivaRajini 2013-05-08 17:46:35

+0

??一旦ajax返回成功,它將'數據'傳遞給由加載函數傳遞給它的回調函數。在另一個答案中看看評論。 – ZimSystem 2013-05-08 17:52:29