Это похоже на довольно нубский вопрос, но какого черта.Я сижу с проектом PhoneGap и у меня есть некоторые проблемы.Я следовал учебному пособию для небольшой твиттеровой ленты с ajax (http://wiki.phonegap.com/w/page/42450600/PhoneGap%20Ajax%20Sample)), и она работает как чудо. Но я кодирую небольшой API для входа, выхода из системы и т. Д., И т. Д., И я почти заставил его работать.1003 * Я объясню свою проблему: я установил, например, переменную BOOL, "b", которая определяет, вошел ли пользователь в систему или нет.
var b = Do_Ajax ('isloggedin');
и функция выглядит почти точно так:
function Do_Ajax(what)
{
var ajax = new XMLHttpRequest();
if(what == "isloggedin")
{
ajax.open("GET", root() + "/?isloggedin",true);
ajax.send();
}
//Get the results back
ajax.onreadystatechange=function()
{
if(ajax.readyState==4 && (ajax.status==200||ajax.status==0))
{
eval('var data = ' + ajax.responseText + ';');
var theResults = data.results;
if(data['BOOL'] != null )
{
return data['BOOL'];
}
}
}
}
Если я сейчас попробую предупредить об этой переменной (b), я получу "неопределенное". Если я изменю "возврат" на "alert "(где я печатаю" return data ['BOOL']; "- php возвращает строку json) я получу значение true или false. Если у меня тогда будет предупреждение о переменной b И в функции - bСначала переменная оповещает, а затем данные ['BOOL'] предупреждают.
Таким образом, проблема в том, что функция возвращает неопределенное значение, прежде чем получает данные. Как я могу заставить функцию "ждать", чтобы вернуть это значение, пока онозапустил этот материал onreadystatechange?
РЕДАКТИРОВАТЬ: Один из способов решитьЭто значит, что нужно объявить переменную вне функции, например, "var IsUserOnline = false;", а затем в функции, когда запрос выполнит, установить "IsUserOnline = data ['BOOL']:", а затем в коде просто использовать эту переменную.,Но нет, я думаю, что возвращение было бы лучше.Я думаю, что мой код будет очень грязным в будущем, когда я получу / опубликую больше материала через эту функцию.Может быть, это просто мое мнение, что сейчас действительно неправильно?