让 ajax 数据返回到调用函数 - 需要澄清之前的答案

Getting ajax data back to calling function - need clarification of previous answer

本文关键字:答案 数据 ajax 返回 函数 调用      更新时间:2023-09-26

我正在尝试实现以下问题中给出的答案:如何从异步调用返回响应?

向下滚动到Hemant Bavle的答案(目前为62票)。这正是我试图实现的,但仍然没有运气。这是我的尝试(为了简洁起见,我省略了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()的结果是setResult()本地的,在它之外不可见?如果是这样,这个问题的解决方案是什么?

您似乎仍然缺少 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');
});