jquery .done返回值 - 困惑

时间:2013-06-12 09:38:55

标签: jquery ajax

我正在尝试构建执行非常具体操作的小函数,并在处理程序上使用它们。 我试图这样做,将JSON对象发送到php脚本,然后以json对象的形式返回响应。

这是我到目前为止所写的功能:

function isRegistered(courseObj){
    var posting = $.post("is-user-registered.php", courseObj);
    posting.done(function(data){
        var res = $.parseJSON(data);
        if(res.response == "success"){
            return 0;
        } else {
            return 1;
        }
    });
}

这是处理程序:

$('a.button.findDelegate').bind("click", function(){
    var textToSearch = $('#findUserBox').val();
    var txtObj = {};
    var courseObj = {};

    courseObj['courseId'] = $('input[name=courseId]').val();
    courseObj['email'] = txtObj['text'] = textToSearch;

    if(txtObj['text'].length > 2){
        if(isRegistered(courseObj) === 0){
            console.log("search user and then add it to the list");
        } else {
                            console.log("this user is already registered lets throw an error");
                    }
    }
    return false;
});

问题是isRegistered总是返回undefined。 我几乎可以肯定,这与.done没有被立即执行有关,因为在undefined上实际上是在ajax调用之前记录的。{/ p>

如果是这种情况,我该如何强制处理程序等待isRegistered响应?

我对所有建议持开放态度,我可能正在使用错误的工具(jQuery)来执行此操作?

抱歉缺乏清晰度。

1 个答案:

答案 0 :(得分:1)

done因为所有异步回调在将来某个时间返回,可能在1毫秒内,也许在10分钟内(并且一些回调永远不会像error\success那样触发)。

这意味着您只能在回调中使用这些值。

尝试将代码更改为:

function isRegistered(courseObj){
    var posting = $.post("is-user-registered.php", courseObj);
    posting.done(function(data){
        var res = $.parseJSON(data);
        if(res.response == "success"){
            // Do what's needed here ------------------------------
        } else {
            // Do what's needed here ------------------------------
        }
    });
}