我正在尝试构建执行非常具体操作的小函数,并在处理程序上使用它们。 我试图这样做,将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)来执行此操作?
抱歉缺乏清晰度。
答案 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 ------------------------------
}
});
}