2015-10-12 1 views
0

У меня есть функция, как этотОбратный вызов на пользовательской функции

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» была полностью выполнена до продолжения, поэтому я делаю функцию обратного вызова для регистрации результата. Где я ошибаюсь?

ответ

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); 
    }); 
} 
3

Просто добавить функцию в качестве параметра не делает его «обратный вызов» :)
Вы должны назвать его внутри 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); 
    }; 
+0

привет, приятель, вам нужно добавить описание вместе с кодом, его код плохого качества. не ожидал этого от кого-то из вашей репутации. – dreamweiver

0

Вы должны использовать jQuery.when(), он предоставляет возможность для выполнения функции обратного вызова на основе одного или нескольких объектов, обычно Отсроченные объекты, которые представляют собой асинхронные события.

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() обратного вызова может быть использован для этого цель.

+0

Это не будет работать, поскольку возвращаемое значение 'is_register' является' undefined' – Andreas

+0

Ahhh, не заметил, что теперь 'is_register()' вернет отложенный объект – dreamweiver