如何在JavaScript函数中设置和返回变量?

如何在JavaScript函数中设置和返回变量?,javascript,function,variables,Javascript,Function,Variables,先看这个例子,然后你就可以理解我的问题了 var x; function checkTime() { $.ajax({ type: 'GET', url: 'http://www.example.com/time.php', data: test, dataType:'json', success: function (data) { if (data == 0){

先看这个例子,然后你就可以理解我的问题了

var x;
function checkTime() {
    $.ajax({ 
        type: 'GET', 
        url: 'http://www.example.com/time.php', 
        data: test,
        dataType:'json',
        success: function (data) {
            if (data == 0){
                x = 'true';
            } else if (data == 1){
                x = 'false';
            }
        }
    });
}

checkTime();
alert (x);
警报将是未定义的

我需要在checkTime函数内设置x,并在函数外获取它

即使我这样做:

var x = checkTime();
alert (x);
我仍然没有定义

而且我只需要检查是真是假,也许还有别的方法。我还尝试:

...
if (data == 0){
    return true;
} else if (data == 1){
    return false;
}
...
但我不知道如何检查

基本上我需要这样做:

如果x==1{//ifx==true //做点什么 }

有什么想法吗


谢谢,这是因为AJAX是异步的。当代码达到警报时,AJAX请求的成功函数尚未执行。您可以尝试将ajax请求设置为async:false,或者在success函数中发出警报

不能直接访问为成功定义的函数的返回值;首先,您应该知道这里涉及两个函数:checkTime和ajax调用成功事件的未命名事件处理程序函数。您希望从该未命名事件处理程序函数中检索一个值;但是,该函数不是直接从checkTime调用的,而是在AJAX请求返回时调用的:函数数据{…}在AJAX调用成功的事件发生时执行

在您的示例中,在执行checkTime之后调用的警报通常会在AJAX请求完成之前调用;这是因为AJAX请求是异步发生的,因此调用成功的事件不必发生。如果您总是想等待请求的响应,那么可以禁用AJAX调用async:false的异步性;但是,也许您也可以直接在事件处理程序中而不是在外部执行您想要执行的操作。如果您想遵循事件驱动编程范式,那么这将是一种可行的方法

如果您希望在请求运行时继续执行其他操作,您的选项还包括,例如,使用其他一些变量(例如,全局变量)作为成功函数AJAX调用的返回值,并可能使用一秒钟来指示调用是否完成,并定期检查是否已设置,但这不会遵循事件驱动编程范式,这可能被视为不好的做法,因为它需要对变量进行不必要的频繁轮询。

这是因为在执行成功函数之前,checkTime立即返回。success函数直到ajax调用完成后才执行,因此当您尝试使用它时,还没有设置x


根据您试图完成的任务,您可以将警报放入成功回调中。

之所以发生这种情况,是因为.ajax的默认行为是异步的。在发出警报时,x将不会被设置。您需要将.ajax设置为aync=false,或者传入回调函数,以便在ajax请求完成时调用,例如

function checkTime(callback) {
    $.ajax({ 
        type: 'GET', 
        url: 'http://www.example.com/time.php', 
        data: test,
        dataType:'json',
        success: function (data) {
            var x = '';
            if (data == 0){
                x = 'true';
            } else if (data == 1){
                x = 'false';
            }
            // Call the callback function with 'x'
            callback.call(null, x);
        }
    });
}
然后按如下方式使用:

checkTime(function (x) {
    alert(x);
});

变量的定义与您预期的一样,但是ajax函数是异步的,因此在您发出警报时变量没有定义。是的。此外,checkTime本身不返回任何内容,因此x=checkTime的结果自然会归结为未定义。