jQuery:$ .ajax成功回调不允许我分配给外部私有变量

时间:2012-02-22 18:08:12

标签: javascript jquery ajax scope

var doCheck = function() {
    var data;

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

上述代码,无论数据是什么,都会返回01。在成功回调的范围内,这是事实。参数resp的值为01,具体取决于input

但是,每当我尝试访问私有变量(不应受范围影响)时,都不会发生任何事情;当console.log(data);被调用时,所有写入console的内容都是undefined

此功能没有父级,所以不要担心其他类型的范围干扰。

5 个答案:

答案 0 :(得分:3)

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
});

答案 1 :(得分:2)

在'data = resp'之后放置'console.log(data)'句子。 可能它在成功方法之前执行,并且因为它没有设置值。

答案 2 :(得分:2)

获得响应需要时间,所以当数据尚未设置时,console.log()会出现

答案 3 :(得分:0)

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

答案 4 :(得分:0)

Ajax代表异步JavaScript和XML。在调用服务器返回后设置data,并且仅在调用成功时才设置{{1}}。

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