我目前正在使用许多Ajax请求来访问来自restfull服务的数据。有些操作需要多个连续呼叫。只要我执行了第一个我遇到了竞争条件。 (调用ajaxCall_1,然后ajaxCall_2,它使用ajaxCall_1的结果,但ajaxCall_1尚未返回)。当然,我可以使用.success属性,但这对我来说并不适用。让我用下面的一个简单例子来解释。我有一个包含.js文件:JQuery Promise question
function getServerBoolean(){
$.get('url_1',function(data){return data)});
}
function refreshWidget(){
$.get('url_2',function(data){
var serverBoolean = getServerBoolean();
--do some html building here based on boolean returned from server-- }
);
}
function setServerValue(newValue){
$.post('url',{key:newValue},function(data){
// server model has changed, so refresh widget.
refreshWidget();
});
}
每当我打电话setServerValeu(“someValue中”),小部件需要对自己进行刷新,但在此之前,它需要知道服务器的布尔值。以这种方式,我有更多的简化,所以简单地给回调作为方法参数,然后在.success()中调用它并不会为我做到这一点。
我偶然发现了$ .when $ .then $ .done方法,但我不确定如何将这些用于我的情况。有没有人可以帮助我如何设置?
在此先感谢!
理查德
为什么不能使用.success()来调用一个包含ajaxCall_2的函数? –
我有一个包含许多rest/ajax调用服务器的api。如果我要用这些方法使用回调函数,我最终会得到很多带回调函数的嵌套调用,但由于维护代码,这不是我想要的。接下来,我将不得不改变所有的方法,以允许回调函数作为参数,这也不是我想要的,我想保持尽可能干净的API。 $ .when()。然后完成这个。 (它对我来说就像一个魅力) – Bjarne77