jQuery。当函数不能正常等待?

时间:2014-11-07 05:55:28

标签: javascript jquery

我这里有这个代码:

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函数上等待。基本上它打印出来,

嘣! 您好!

而不是......

您好! 嘣!

知道为什么或我缺少什么?

2 个答案:

答案 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!');
});