我有一个prototype.js同步ajax调用,我需要使用Promises转换为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和Promises来帮助设计这个吗?