单个函数中的$ .ajax返回结果和承诺?

时间:2017-05-18 16:18:45

标签: jquery ajax promise wait

我有一个函数调用ajax来检索数据。我遇到的问题是进行嵌套的ajax调用,其中一个调用依赖于other和$ .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,并且在没有返回任何数据的情况下完全失败。 感谢

1 个答案:

答案 0 :(得分:1)

$.when不会神奇地等待任何异步,你需要将promises传递给它 - 为此,你的所有函数都需要实际return

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); });
}