将ajax数据恢复到调用函数 - 需要澄清之前的答案

时间:2016-03-17 15:05:40

标签: javascript jquery ajax

我正在努力实现以下问题中给出的答案:How do I return the response from an asynchronous call?

向下滚动到Hemant Bavle的回答(目前为62票)。这正是我想要实现的,但仍然没有运气。这是我的尝试(为简洁起见,我省略了totalajaxSetup()):

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()的本地结果,并且在其外部不可见?如果是这样,这个问题的解决方案是什么?

1 个答案:

答案 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');
});