自定义函数回调

时间:2015-10-12 10:09:42

标签: jquery function callback

我有这样的功能

function is_register(user_id){
    $.ajax({
        method: "POST",
        url: "functions.php",
        data: {user_id: user_id, action: "is_registred"}
    }).done(function(data) {
        return data;
    });
}

我想在我的代码中的其他地方执行此功能,但它不起作用:

is_register(user_infos.id, function(is_registred_status){   
    console.log(is_registred_status);
}

正如你所看到的,我想要" is_register"函数要在继续之前完全执行,所以我创建一个回调函数来记录结果。我哪里错了?

3 个答案:

答案 0 :(得分:4)

只是添加一个函数作为参数不会使它成为“回调”:) 您必须在is_register内的“正确”位置调用它。

另一个问题是.done()功能中的is_register部分。在传递的回调函数中,您将返回$.ajax()调用收到的值。但这是无用的,因为无法访问该值(How to return the response of an asynchronous call

在这种情况下,我会返回$.ajax()jqXHR object)的返回值,并将.done()部分移到is_register函数之外。

function is_register(user_id){
    return $.ajax({
        method: "POST",
        url: "functions.php",
        data: {user_id: user_id, action: "is_registred"}
    })
}

is_register(user_infos.id)
    .done(function(is_registred_status){   
        console.log(is_registred_status);
    };

答案 1 :(得分:1)

function is_register(user_id , callback)
{
    $.ajax({
        method: "POST",
        url: "functions.php",
        data: {user_id: user_id, action: "is_registred"}
    }).done(function(data) {
        if(callback)
            callback(data);
    });
}

答案 2 :(得分:0)

您需要使用 jQuery.when(),它提供了一种基于一个或多个对象执行回调函数的方法,通常是表示异步事件的Deferred对象。

jQuery代码:

function is_register(user_id){
  return $.ajax({
    method: "POST",
    url: "functions.php",
    data: {user_id: user_id, action: "is_registred"}
  }).done(function(data) {
     return data;
  });
}

$.when(is_register(user_infos.id)).done(function(){
    console.log(is_registred_status);
});

注意:如果它只是一个像你这样的目标的延迟对象,那么你不需要使用$.when(),而.done()/.success()回调可以用于此目的。< / em>的