Проблема связана с тем, что вызов $.getJSON()
является асинхронным. Как только запрос ajax запущен, обработка продолжается внутри getit()
, и ваша функция немедленно возвращает false. Позже, ответ Ajax возвращает и устанавливает user
, но ваша getit()
функция return
издана давно!
Вы можете заставить Ajax-вызов быть синхронным, используя опцию async
, например:
$.ajax({
async: false,
url: ws_url,
type: "GET",
success: function(data) {
alert('user '+data.user);//shows john
user = data.user || false;
}
});
Если вы сделаете это, ваш браузер будет блокировать скрипт до тех пор, пока не будет возвращен вызов Ajax. Как правило, это не идеальное поведение (именно поэтому по умолчанию установлено значение async: true
), поэтому я бы предложил переработать все, что бы оно ни называло getit()
, и ожидать, что оно будет обрабатывать результаты в любое время, возможно, путем это собственная функция обратного вызова для getit()
, которая затем будет выполнена, когда будет getit()
.