我正在努力实现以下问题中给出的答案:How do I return the response from an asynchronous call?
向下滚动到Hemant Bavle的回答(目前为62票)。这正是我想要实现的,但仍然没有运气。这是我的尝试(为简洁起见,我省略了total
和ajaxSetup()
):
fail()
这是一个范围问题,因为function isGoodPIN(pin) {
var result;
var cURL = "server/checkPIN?pin=" + pin;
function setResult(ajaxResult) {
result = ajaxResult; // <--------- true here...
}
var ajaxResponse = $.get(cURL, function (data) {
// data is "OK" here...
setResult(data == "OK" ? true : false);
});
return result; //<--------- undefined here
}
的结果是setResult()
的本地结果,并且在其外部不可见?如果是这样,这个问题的解决方案是什么?
答案 0 :(得分:0)
你似乎仍然忽略了AJAX的观点;因为它是异步。这意味着您无法从父函数返回任何内容,因为return
语句将在请求返回任何数据之前执行很长时间。
您需要更改函数中使用的逻辑,以合并基于AJAX结果执行的回调函数。试试这个:
function isGoodPIN(pin, validCallback, failCallback) {
$.get('server/checkPIN', { pin: pin }, function (data) {
if (data == "OK") { // note you should really use a boolean here
validCallback();
} else {
failCallback();
}
})
}
isGoodPin('1234', function() {
console.log('valid pin');
}, function() {
console.log('invalid pin');
});