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