Это похоже на совершенно нужный вопрос, но что за черт. Я сижу с проектом PhoneGap и имею некоторые проблемы. Я следовал учебнику для небольшого twitterfeed с ajax (http://wiki.phonegap.com/w/page/42450600/PhoneGap%20Ajax%20Sample), и он работает как шарм. Но я кодирую API-интерфейс smal для входа в систему, выхода из системы и т. Д. И т. Д., И я почти получил его на работу.Ajax на PhoneGap не вернет значение
Я объясню свою проблему: Я установил, например, переменную 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'];
}
}
}
}
Если теперь я попробовать предупреждения на этой переменной (б), я получаю «неопределенные». Если я изменил «return» на «alert» (где i print «return data ['BOOL'];» - php возвращает строку json), я получу значение true или false. Если у i есть предупреждение о переменной b переменной AND, то в функции сначала сообщаются предупреждения переменной b, а затем сигналы [BOOL].
Таким образом, проблема в том, что функция возвращает undefined, прежде чем она получит данные. Как я могу заставить функцию «ждать», чтобы вернуть это значение, пока оно не запустило этот файл onreadystatechange?
EDIT: Один из способов решения этой задачи - объявить переменную вне функции, например "var IsUserOnline = false;" а затем в функции, когда запрос, который он выполнил, установил «IsUserOnline = data ['BOOL]:», а позже в коде просто используйте эту переменную. Но нет, я думаю, что лучше всего подумать о возвращении. Я думаю, что мой код будет очень грязным в будущем, когда я получу/отправлю больше материала с помощью этой функции. Может быть, это просто мое мнение, что сейчас действительно неправильно?
Эй, спасибо за репил. Но какую функцию я должен назвать? Назовите себя? Я хочу, чтобы после запроса было, что Do_Ajax должен вернуть значение [BOOL]. Сейчас он просто возвращает undefined, так как он возвращает значение перед запуском файла onreadystatechange. – Linus
Я думаю, вы должны назвать другую функцию. Вы инициализируете запрос ajax, а в onreadystate вы помещаете код, который хотите запустить, когда у вас есть результат ajax. - Вы также можете попытаться поместить часть «if (logged_in)» после onreadystatechange. – Jozzeh
См. Мой отредактированный ответ (заменил «if-isloggedin» – Jozzeh