Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery承诺问题_Jquery - Fatal编程技术网

JQuery承诺问题

JQuery承诺问题,jquery,Jquery,我目前正在从事一个项目,该项目使用许多ajax请求从restfull服务访问数据。有些操作需要多次连续调用。当我实现了第一个,我就遇到了比赛条件。(先调用ajaxCall_1,然后调用ajaxCall_2,使用ajaxCall_1的结果,但ajaxCall_1尚未返回)。当然,我可以使用.success属性,但这对我来说不起作用。下面让我用一个简单的例子来解释。我有一个.js文件,其中包含: function getServerBoolean(){ $.get('url_1',funct

我目前正在从事一个项目,该项目使用许多ajax请求从restfull服务访问数据。有些操作需要多次连续调用。当我实现了第一个,我就遇到了比赛条件。(先调用ajaxCall_1,然后调用ajaxCall_2,使用ajaxCall_1的结果,但ajaxCall_1尚未返回)。当然,我可以使用.success属性,但这对我来说不起作用。下面让我用一个简单的例子来解释。我有一个.js文件,其中包含:

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方法,但不确定如何在我的情况下使用这些方法。有没有人能帮我设置这个

提前谢谢


Richard

我不知道$。当$然后$完成时,但这样做的功能方式是传递回调。可能是这样的:

function getServerBoolean(dataCallback){
    $.get('url_1', dataCallback);
}

function refreshWidget(){
    $.get('url_2',function(data){
        getServerBoolean(function(boolValueReturned) {
           //do something with the value
        });
    });
}

当然,有很多方法可以对此进行调整,例如检查(在getServerBoolean中)我们得到的参数是否是函数,如果不是,则将其设置为某个默认回调。

为什么不能使用.success()调用包含ajaxCall_2的函数?我有一个api,其中包含许多对服务器的rest/ajax调用。如果我在这些方法中使用回调,那么最终会得到许多带有回调的嵌套调用,由于代码的维护,这不是我想要的。接下来,我必须更改所有方法,以允许回调函数作为参数,这也不是我想要的,我希望保持api尽可能干净。$。when()。那么这就完美了。(这对我来说很有魅力)听起来不错。我试试看。我有点担心(在我的例子中)最终会出现很多嵌套方法/回调。我希望$.when().then方法能够避免这种情况的发生。无论如何,这是最干净的方法。我检查了jQuery文档中的$.when描述,基本上是它的相似之处—您传递在其他回调完成后执行的回调。如果大多数(如果不是全部)回调函数都被定义为命名函数,那么代码就不会太复杂,然后您只需要定义“流”或函数,这些函数将按所需顺序传递这些命名回调函数。。。这是将函数分配给var吗?然后使用.call()方法?将一个函数分配给一个变量或使其成为某个对象的属性。基本上,任何可以让您通过名称引用该函数的内容:)