在AJAX中使用$ .when和$ .done,并在完成后尝试获取结果

时间:2013-02-14 14:31:10

标签: jquery ajax

我正在调用AJAX调用,每次调用ajax调用时都会将其传递给函数来处理它。我之所以这样做,是因为我一次保持对AJAX请求的反击(主要用于开发目的)。我试图检索AJAX调用的结果,然后放置然后操纵该数据。

让我粘贴一些代码以便更清晰。

function GET_allSystems() {
    return $.ajax({
        type: "GET",
        url: getSystemUrl(), // Unimportant, I call the url from a method
        cache: false,
        dataType: "json"
    });
}

// This will automatically increment and decrement the semaphore variable
// and execute functions when AJAX call is done.
function processAjaxCall(performAjaxCall, doFunctionWhenDone) {
    ajaxCall++;
    $.when(performAjaxCall).done(function (result) {
        ajaxCall--;
        doFunctionWhenDone(result);
    });
}

// I process the ajax to get all system information then put it in an object
processAjaxCall(GET_allSystems, function (result) {
    systemMap["systems"] = result;
});

目前我正在获取函数GET_allSystems()而不是我通常会得到的实际数据json。

我想通过该函数传递ajax调用,因为它允许我知道当前是否正在进行AJAX调用,它只是提供了我想要的抽象级别。

很明显我做错了什么,但我想会在ajax调用完成后执行$ .done并将结果传回...但这似乎不是这种情况。

1 个答案:

答案 0 :(得分:2)

您需要调用performAjaxCall

function processAjaxCall(performAjaxCall, doFunctionWhenDone) {
    ajaxCall++;
    $.when(performAjaxCall()/* Call the function */).done(function (result) {
        ajaxCall--;
        doFunctionWhenDone(result);
    });
}

performAjaxCall返回$.when使用的ajax promise对象。