Я делаю свое первое мобильное приложение с jQuery mobile и phonegap/cordova. Все идет отлично, пока я не создаю сами страницы, но как только я хочу получить доступ к некоторым переменным, доступным с удаленного сервера, он не работает в определенных местах. Я уже пробовал около 30 вариантов повторного написания того же кода снова - буквально потратил 4 часа на выводе простого var -, но без успеха, и я просто вытаскиваю оставшиеся волосы сейчас.
Здесь мой код snip
У меня есть html файл, файл js и php на serveride, выводящий json-ответ
Ответ php я получаю:
{"item":{"ID":"1","fname":"Kris","lname":"Nagy","email":"[email protected]","password":"abc123","role":"1","practice":"0","address":"","city":"","zip":"","phone":""}}
login.js
var userName;
function getUser() {
$.getJSON( "http://myserver.com/[email protected]&pass=absc123", function( json ) {
console.log( "JSON Data: " + json.item.fname );
console.log( "JSON Data: " + json.item.email );
// testing if i have the correct data, console outputs the rigth values
userName = = json.item.fname;
window.userName = json.item.fname;
//trying to assign value to variable
console.log( "Variable data" + window.userName );
// testing if i have the correct data stored, console outputs the right value
});
}
getUser();
console.log( "test outside function" + window.userName );
//gives back undefined
index.html (здесь я просто пытаюсь получить доступ к переменной, конечно, у меня есть полный html, включая js, jquery и все необходимое)
<script>
getUser(); //outputs the values to console
console.log( "test in html" + window.userName ); /*/gives back undefined
</script>
Поскольку мне нужно несколько vars в моем html для работы, как я могу достичь, чтобы вывести их в html. Этот пример пытается сделать какой-то логин, но мой вопрос более правдоподобен для переменных, поскольку я хочу их понять. По моему мнению, у меня есть глобальные переменные с окном. но кажется, что все, но быть глобальным, и мне нужно будет работать с переменными по всему приложению, поэтому его жизненный смысл я понимаю. Хотя, как вы видите, мне кажется, я пропустил точку, поэтому любая помощь так ценится. Я знаю, как работать с php, но поскольку конечный продукт должен работать на кордове, я ограничен html/js на стороне клиента, а javascript не является моей силой (пока).
Вы можете вернуть интерфейс обещания, открытый с помощью ajax-запроса из вашей функции:
var userName;
function getUser() {
return $.getJSON(...);
}
getUser().done(function () {
console.log("test outside function" + window.userName);
});
Вы не можете получить доступ к userName
вне успеха обратного вызова JSON, так как вы присваиваете значение только дэ в успехе обратного вызова асинхронного метода.
console.log( "test outside function" + window.userName ); // it wont work
Если вы все еще хотите получить доступ немедленно, выполните синхронный вызов, установив одну из ajax-настроек async:false
, но общая цель ajax потеряна