我正在尝试根据第一个结果运行第二个函数。
$('#email').blur(function () {
id = $(this).attr('id');
$(myObj).data(id,"");
is_email(id); // If it's a valid email, it does this: $(myObj).data(id,"ok");
// Now if it's a valid email address, I want to run a second function to see if
// it's already taken.
if ($(myObj).data("email") == "ok") {
$(myObj).data("email",""); // Resets the value...
is_taken(id, "employees", "email"); // To test it again...
}
});
第一部分工作正常,但是当我到达if($(myObj)....它永远不会被检查。我假设因为这是在同一个模糊事件上设置的。我想把它放在后面第一个函数,它会在第一个函数完成后检查这个对象的值。我的猜测是它在第一个函数有机会返回值之前检查值是否为“ok”。
答案 0 :(得分:1)
因为函数使用AJAX,所以在第一个AJAX调用返回之前调用第二个并设置数据值。 AJAX中的关键字是第一个'A' - 异步,意味着代码流继续而不等待响应。您可以通过更改data
函数来接受回调来避免这种情况(并避免使用is_email
来存储中间结果)。根据第一次调用的结果,在AJAX调用完成时运行第二个函数作为回调。
function is_email( id, type, check, callback )
{
var that = this;
$.post( '/email/check', $('#'+id).val(), function(result) {
if (result == 'ok') {
if (callback) {
callback.call(that,id,type,check);
}
}
}
}
用作:
is_email(id, "employees", "email", istaken);