我这里有这个代码:
function checker() {
return $.ajax({
type: 'POST',
url: '/test/check'
})
}
function is_checker_true(object) {
$.when(object).done(function(me) {
if (!me.check) {
return false;
} else {
return true;
}
});
}
var checker_var = checker();
if (!is_checker_true(checker_var)) {
alert('Hello!');
}
alert('Boing!');
ajax调用基本上是一个URL,它会在{check:true}这样的JSON对象中返回true或false。
我无法弄清楚为什么JS不会在when函数上等待。基本上它打印出来,
嘣! 您好!
而不是......
您好! 嘣!
知道为什么或我缺少什么?
答案 0 :(得分:1)
因为您的is_checker_true
导致您的退货声明无法转换。当你在一个闭包中(即$.when(object).done(function(me) {
)时,你在那里返回的东西不会在外部范围方法(is_checker_true()
)中直接返回。
尝试将您的提醒置于if (!me.check) {
检查范围内,并且应该按预期工作。
function checker() {
return $.ajax({
type: 'POST',
url: '/test/check'
});
}
function is_checker_true(object) {
$.when(object).done(function(me) {
if (!me.check) {
alert( '!me.check' );
} else {
alert('Boing!');
}
});
}
var checker_var = checker();
is_checker_true( checker_var );
alert('Hello!');
答案 1 :(得分:1)
Javascript ajax调用以异步方式运行。异步意味着您的功能不会等待服务器响应。顺便说一下,你的函数总会返回undefined
function checker() {
return $.ajax({
type: 'POST',
url: '/test/check'
});
}
function is_checker_true(object, op1, op2) {
$.when(object).done(function(me) {
if (!me.check) {
op1();
} else {
op2();
}
});
}
var checker_var = checker();
is_checker_true(checker_var, function(){
alert('Hello!');
}, function(){
alert('Boing!');
});