Jquery模糊功能:首先运行第二个功能。怎么样?

时间:2011-10-01 14:31:02

标签: javascript jquery function

我正在尝试根据第一个结果运行第二个函数。

$('#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”。

1 个答案:

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