用jQuery AJAX和Promission替换synchronous Prototype.js AJAX

用jQuery AJAX和Promission替换synchronous Prototype.js AJAX,jquery,ajax,promise,prototypejs,Jquery,Ajax,Promise,Prototypejs,我有一个prototype.js同步ajax调用,需要使用prototype将其转换为jQuery ajax调用 这是我的基本出发点 // synchronous prototype.js ajax function function isSwitchOn() { var isOn = false; var myAjax = new Ajax.Request('checkSwitch', { method: 'post', asynchronous: fals

我有一个prototype.js同步ajax调用,需要使用prototype将其转换为jQuery ajax调用

这是我的基本出发点

// synchronous prototype.js ajax function
function isSwitchOn() {

    var isOn = false;

    var myAjax = new Ajax.Request('checkSwitch', {
        method: 'post', asynchronous: false, evalJSON: 'force', requestHeaders: { Accept: 'application/json' },

        onSuccess: function (transport) {
            if (isValidResponse(transport)) {
                if (transport.responseJSON.result == "switched") {
                    isOn = true;
                }
            }
        },
        onFailure: function (oXHR, oJson) { handleFailure(oXHR.status); },
        onException: function (request, err) { handleException(request, err); }
    });

    return isOn;
}

//calling function snippet
do {
    // complex stuff that affects switch status and manages UI
} while (!isSwitchOn());
这是我的转换尝试,但它没有在循环评估之前设置switchStateOn

function handleSwitchResponse(response) {
    if (isValidResponse(response)) {
        if (response.result == "switched") {
            return true;
        }
    }    
    return false;
}

function checkSwitch() {
    return getJson('checkSwitch')
               .then( function (data) { return data; })
               .fail( function (oXHR, textStatus, errorThrown) { handleException(oXHR, textStatus + ": " + errorThrown.message); });
}

function getJson(url) {
    return jQuery.ajax(url, { method: 'POST', dataType: 'json' });
}

//calling function snippet
var switchStateOn;
do {
    // complex stuff that affects switch status and manages UI

    checkSwitch().then(function (response) { switchStateOn = handleSwitchResponse(response); });
} while (!switchStateOn);

有人能使用jQuery AJAX和promissions来帮助适当地构建它吗?

你不能这样做。你也需要使循环异步。目前,循环本身的迭代有一个内在的顺序。我不知道你说的“使循环也异步”是什么意思。你能详细说明吗?你不能那样做。你也需要使循环异步。目前,循环本身的迭代有一个内在的顺序。我不知道你说的“使循环也异步”是什么意思。你能详细说明一下吗?