Javascript jQuery:$.ajax成功回调不';t让我分配给外部私有变量

Javascript jQuery:$.ajax成功回调不';t让我分配给外部私有变量,javascript,jquery,ajax,scope,Javascript,Jquery,Ajax,Scope,无论数据如何,上述代码只返回0或1。在成功回调的范围内,这是正确的。参数resp的值为0或1,具体取决于input 然而,每当我试图访问一个私有变量(不应该受到范围的影响)时,什么都不会发生;当console.log(数据)时被称为所有写入控制台的都是未定义的 此函数没有父函数,因此不必担心其他类型的作用域干扰。将“console.log(data)”语句放在“data=resp”之后。 它可能在success方法之前执行,因为它没有设置值。在获得响应之前需要时间,因此当数据尚未设置时,cons

无论数据如何,上述代码只返回
0
1
。在成功回调的范围内,这是正确的。参数
resp
的值为
0
1
,具体取决于
input

然而,每当我试图访问一个私有变量(不应该受到范围的影响)时,什么都不会发生;当
console.log(数据)时被称为所有写入
控制台的
都是
未定义的

此函数没有父函数,因此不必担心其他类型的作用域干扰。

将“console.log(data)”语句放在“data=resp”之后。
它可能在success方法之前执行,因为它没有设置值。

在获得响应之前需要时间,因此当数据尚未设置时,console.log()就会出现。

这是因为默认情况下ajax请求是异步的,而不是同步的,我建议重新设计您的方法。

Ajax代表异步JavaScript和XML<代码>数据
是在对服务器的调用返回后设置的,并且仅当调用成功时设置


在发送异步请求之后,在成功运行之前,console.log立即发生。

Ajax是异步的。这就是为什么您必须使用回调来组织逻辑:

var doCheck = function() {
    var data;

    $.ajax({
        url: 'check.php',
        data: 'ch=check',
        success: function(resp) {
            data = resp;
        }
    });
console.log(data);
    return data == 1;
};

您总是在ajax调用之前记录数据,因此数据将是未定义的。我忘记了调用是异步的。您的解决方案让我能够维护一个异步回调并将数据发送回,谢谢。
var doCheck = function(callback) {
    var data;

    $.ajax({
        url: 'check.php',
        data: 'ch=check',
        success: function(resp) {
            callback(data == 1);
        }
    });
};

doCheck(function(result) {
    // result is true or false
});