2013-05-08 83 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