【问题标题】:ajax function returning undefinedajax 函数返回未定义
【发布时间】:2011-10-09 12:07:41
【问题描述】:

我有一个使用 AJAX(PHP) 验证代码的功能。但是,当我尝试运行它时,它会返回 undefined,而它应该返回 truefalse

功能:

function verifyViite(viite) {
    $.get('dataminer.php?question=validateViite&q='+viite, function(data) {
        jQuery.globalEval(data);
        if(valid == 1) {
            return true;
        }
        else {
            return false;
        }
    });
}

datavalid = 1;valid = 0;

【问题讨论】:

    标签: javascript jquery ajax callback


    【解决方案1】:

    由于AJAX请求是异步的,所以无法返回Callback返回值。

    在回调内部执行任何调用verifyViite 的代码,而不是返回真或假。

    或者,您可以使用synchronous AJAX request

    【讨论】:

    • 如果我理解错了,我很抱歉,但你是说我不能通过函数进行验证?
    • 您可以通过函数进行此验证,但您需要提供回调(就像我在其他帖子中发布的那样......)
    • 你不能以你现在尝试的方式去做——你必须改变你的逻辑。发布更多代码,我们也许可以为您提供更好的逻辑。
    • 一个问题;为什么要执行异步请求?
    • 同步请求意味着浏览器正在等待直到请求完成。如果服务器需要很长时间来加载它会导致整个页面“挂起”直到它完成 - 对用户来说不是很好的体验.通过使其异步,页面将照常加载,当数据准备好时,您可以更新页面中的适当部分。
    【解决方案2】:

    由于函数veryViite 不返回任何内容,因此未定义是预期的结果。由于它是异步的,因此您必须提供一个回调函数,该函数将在成功的 ajax 调用时调用。像这样的东西;

    function verifyViite(viite,cb) {
        $.get('dataminer.php?question=validateViite&q='+viite, function(data) {
            jQuery.globalEval(data);
            if(valid == 1) {
                cb(true);
            }
            else {
                cb(false);
            }
        });
    }
    

    电话会是这样的;

    verifyViite(viite,function(good){
        alert(good);
    });
    

    【讨论】:

    • 好的,cb 是这里的函数吗?
    • 你能给我解释一下这个“回调”的事情吗?
    • 是的。正如您从我如何调用 verifyViite 中看到的那样,我提供了一个函数,该函数将在 ajax 返回时调用。因此,提供的函数是verifyViite 中的变量cb。如果该功能可以计算错误并将文档标记为“不可加载”,则该功能将更有意义。在你的电话结束时,你可以弄清楚如何处理错误的电话。顺便说一句 - >使用 Eval 是“坏”的做法! JQuery 将为您完成所有必要的“评估”以访问信息。
    • ok, callbacks -> 通常,当你调用一个异步函数(一个不能提供直接结果的函数,导致它在后台做某事,你需要等待)时,你会跳转脱离代码如何做某事的逻辑。如果我们为异步函数提供一个函数,我们可以确保在异步函数返回时调用该函数。因此,它被称为“回调函数”。有帮助吗?
    • 哦,这样function (good)在服务器响应后会被调用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2019-01-07
    相关资源
    最近更新 更多