Jquery $.ajax是否在单个函数中返回结果和承诺?

Jquery $.ajax是否在单个函数中返回结果和承诺?,jquery,ajax,promise,wait,Jquery,Ajax,Promise,Wait,我有一个函数来调用ajax来检索数据。我遇到的问题是进行嵌套ajax调用,其中一个调用依赖于另一个调用,而$.wait().then()实际上不起作用。我的问题有什么解决办法吗。这里有一个例子 function _Ajax(params){ if(params == ''){ alert('no post params'); return; } var xdata; $.ajax({ type: "POST", url: "/xml/", async: f

我有一个函数来调用ajax来检索数据。我遇到的问题是进行嵌套ajax调用,其中一个调用依赖于另一个调用,而$.wait().then()实际上不起作用。我的问题有什么解决办法吗。这里有一个例子

function _Ajax(params){
if(params == ''){
    alert('no post params');
    return;
}
var xdata;
$.ajax({
    type: "POST",
    url: "/xml/",
    async: false,
    data: params,
    dataType: "xml",
    success: function(xml){
        xdata = xml;
    },
    error: function() {
        alert("An error occurred while processing XML file. Params:" + objToString(params));
    }
    });
    return xdata;
}

function A(a,b){
    _Ajax({a:a,b:b});
}
function B(a,b,c){
    _Ajax({a:a,b:b,c:c});
}
function C(a,b){
    A(a,b);
    B(a,b);
}
function D(a,b){
    _Ajax({a:a,b:b});
}
function E(){
    $.when(C(a,b)).then{function(){ D(a,b);});
}
我还尝试将async更改为true,但它完全失败,没有返回任何数据。
谢谢

$。当
没有神奇地等待任何异步操作时,您需要向它传递承诺-为此,您的所有函数都需要实际返回它们:

function _Ajax(params){
    if(params == ''){
        return $.Deferred().reject('no post params').promise();
    }
    return $.ajax({
        type: "POST",
        url: "/xml/",
        data: params,
        dataType: "xml"
    }).catch(function() {
        throw "An error occurred while processing XML file. Params:" + objToString(params));
    });
}

function A(a,b){
    return _Ajax({a:a,b:b});
}
function B(a,b,c){
    return _Ajax({a:a,b:b,c:c});
}
function C(a,b){
    return $.when(A(a,b), B(a,b));
}
function D(a,b){
    return _Ajax({a:a,b:b});
}
function E(){
    return C(a,b).then{function([xdata1], [xdata2]){ return D(a,b); });
}

返回扩展数据可能重复不起作用
\u Ajax
应该返回
$的结果。Ajax
A
B
等需要返回
\u Ajax
的结果,
成功
需要发生在所有这些之外。。基本上是重复的,这里最大的问题是,Ajax函数返回promise,但我也需要它返回XML结果。我假设其中一个解决方案是返回一个数组?@Joseph它应该返回对XML结果的承诺,不是吗?您可以通过
然后
回调的参数访问它。您打算在哪里使用扩展数据?有数百个现有函数以不同的方式处理此扩展数据参数…@Joseph,但它肯定是每个函数中的一个参数,而不是全局变量?你在承诺链的什么地方给他们打电话?是的,这是一个参数。该功能目前没有使用承诺,因为到目前为止还不需要它