Ajax函数返回undefined

4

我有一个用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;
        }
    });
}

data 要么是 valid = 1; ,要么是 valid = 0;

2个回答

5

由于AJAX请求是异步的,因此无法返回回调函数的返回值。

执行调用verifyViite的任何代码都应该放在回调函数内部,而不是返回true或false。

或者,您可以使用同步的AJAX请求


对不起,如果我理解错了,请问您是说我不能通过函数进行此验证吗? - Axel Latvala
你可以通过一个函数来完成这个验证,但你更需要提供一个回调函数(就像我在另一篇帖子中发布的那样)。 - japrescott
你现在的尝试方式行不通,你需要改变你的逻辑。发布更多代码,我们也许能够给你更好的解决方案。 - Shadow The Spring Wizard
一个问题;为什么有人想要执行异步请求? - Axel Latvala
同步请求意味着浏览器会等待请求完成。如果服务器加载时间很长,它会导致整个页面“挂起”,直到它完成 - 这对用户来说不是很好的体验。通过异步方式,页面将像往常一样加载,当数据准备好时,您可以更新页面中的适当部分。 - Shadow The Spring Wizard

2

由于函数veryViite没有返回任何内容,因此预期结果是undefined。由于它是异步的,您需要提供一个回调函数,在成功的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是一个函数吗? - Axel Latvala
你能向我解释一下这个“回调函数”是什么吗? - Axel Latvala
是的。从我调用verifyViite函数的方式可以看出,我提供了一个在ajax返回时将被调用的函数。因此,提供的函数是verifyViite中的变量cb。如果该函数能计算错误并标记文档为“不可加载”,那么这个函数将更有意义。在调用结束时,您就可以确定如何处理错误调用了。 顺便说一句->使用Eval是“不好”的做法!JQuery会为您执行所有“eval”操作以访问信息。 - japrescott
好的,回调函数 -> 通常情况下,当您调用异步函数(即不能直接提供结果的函数,因为它在后台执行某些操作并且需要等待)时,您会跳出代码执行逻辑。如果我们向异步函数提供一个函数,我们可以确保该函数将在异步函数返回时被调用。因此,它被称为“回调函数”。有帮助吗? - japrescott
哦,那么服务器响应后会调用 function (good) 函数? - Axel Latvala
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接