var doCheck = function() {
var data;
$.ajax({
url: 'check.php',
data: 'ch=check',
success: function(resp) {
data = resp;
}
});
console.log(data);
return data == 1;
};
上述代码,无论数据是什么,都会返回0
或1
。在成功回调的范围内,这是事实。参数resp
的值为0
或1
,具体取决于input
。
但是,每当我尝试访问私有变量(不应受范围影响)时,都不会发生任何事情;当console.log(data);
被调用时,所有写入console
的内容都是undefined
。
此功能没有父级,所以不要担心其他类型的范围干扰。
答案 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立即发生。在成功有机会运行之前。