Задать вопрос
heksen
@heksen

Как возвратить значение из функции класса в javascript?

Всем привет. Я не силён в javaскрипт. И поэтому я задаю этот вопрос. Я создал класс и ф-цию в нём. И из этой функции мне следует возвратить значение, но это значение не возвращается.

// мой класс
var comlib =
{
}
comlib.GetMessages = function()
{
var num;
$.ajax
({
url: "get_messages.php",
type: 'get',
success: function( data )
{
num = data; // присваиваю (в php echo "1"; например )
console.log( num ); // пишу в лог. всё отлично
}
});
return num; // возвращаю, пишет что undefined как ведь я присвоил?
}
  • Вопрос задан
  • 2991 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
mlnkv
@mlnkv
JavaScript Developer
Для начала, почитайте по js что нибудь толковое, потом пишите "классы", то что вы написали - не класс.

function Comlib() {

  this.getMessage = function(cb) {
    $.get("get_messages.php", function(resp) {
      cb && cb(resp);
    });
  }

} 

var comlib = new Comlib();

comlib.getMessage(function(num) {
  console.log(num) // здесь уже можно работать с num
});
Ответ написан
Комментировать
thewind
@thewind
php программист, front / backend developer
Вы присваиваете значение переменной после успешного выполнения аякс запроса, а возврат значения происходит раньше, т.к. Последовательность действий не дожидается ответа от аякс запроса.
Ответ написан
Комментировать
RusPOPsy
@RusPOPsy
Говорила мама, учи математику ...
Ну так само собой, вы не сможете так вернуть.
Событие success происходит гораздо позже чем ваш return (после того как сервер ответит)
Return после Ajax сделать не получится, по крайней мере без костылей.
Можно делать так:
comlib.GetMessages = function(callback)
{
   $.ajax
   ({
       url: "get_messages.php",
       type: 'get',
       success: function( data )
       {
            callback(data);
       }
   });
}

comlib.GetMessages(function(data){
   console.info(data); // выведет ответ Ajax
})
Ответ написан
delch
@delch
Frontend developer
Область видимости переменных, Друг...
Ответ написан
Комментировать
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы