0

我正在尝试构建做非常具体的事情并在处理程序上使用它们的小函数。我试图这样做将 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总是返回未定义。我几乎可以肯定这与 .done 没有立即执行有关,因为undefined实际上是在 ajax 调用之前记录了 chrome 上的。

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

我对所有建议持开放态度,我可能使用了错误的工具(jQuery)来做到这一点?

对不起,缺乏明确性。

4

1 回答 1

2

done因为所有异步回调都在未来某个时间返回,可能在 1ms 或 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 ------------------------------
        }
    });
}
于 2013-06-12T09:42:52.630 回答