ajax延迟链接电话

时间:2015-06-11 04:33:29

标签: javascript jquery ajax

我有点困惑我使用Fragment的结果来修改一个全局对象(我不确定一个更好的方法来做到这一点)试图用延迟完成这个。到calltwo()时,应该使用新数据修改全局对象

<?php

function get_external_files(){

wp_enqueue_style('style', 'get_stylesheet_uri()');

}

add_action('wp_enqueue_scripts', 'get_external_files'); 

- Ajax功能:1

callone()

1 个答案:

答案 0 :(得分:3)

我在下面提供了一个更简单的实现。

callone()必须返回延迟或承诺,您可以等待它或将其他操作链接到它,您只需使用$.ajax()已经返回的承诺而不是创建自己的承诺。

此外,没有理由在这里使用$.when(),因为当你试图等待并行运行的多个promise时,它实际上只会增加价值,这根本不是你的情况。因此,您可以在已有的个人承诺上使用.then()处理程序。

此外,在处理异步操作时,您确实不想使用全局变量。您可以链接承诺并通过承诺传递数据。

以下是callone()的样子:

function callone(requiredData) {
    return $.ajax({
        type: "POST",
        url: 'AB/',
        data: requiredData
    });
}

function calltwo(...) {
    // similar to callone
    // returns promise from $.ajax()
}

callone(...).then(function(data) {
    // when callone is done, use the id from its result
    // and pass that to calltwo
    return calltwo(data.id);
}).then(function(data) {
    // process result from calltwo here
}, function(err) {
    // ajax error here
});

请注意,此代码未创建任何新的Deferred对象。它只是使用已从$.ajax()返回的承诺。另请注意,它不是使用success:error:处理程序,因为这些也是通过承诺。

另外,请注意,从.then()处理程序中返回一个promise会自动将其链接到之前的promise中,这样在新返回的promise也被解析之前,前一个promise将无法解析。这可以让你保持链条的运转。

另外,请注意,从异步回调函数返回数据不会将数据返回给原始函数的调用者,因此您尝试从success:处理程序返回某些内容并未完成任何操作。相反,使用promises并通过promises返回数据,因为它们专门用于将异步数据返回给.then()处理程序。