Ошибка доступа к глобальной переменной javascript

0

Я делаю свое первое мобильное приложение с 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 не является моей силой (пока).

  • 0
    Вот так работает ajax по умолчанию, асинхронно. Пожалуйста, прочитайте: stackoverflow.com/questions/14220321/…
  • 0
    Спасибо за ссылку. Однако это не решает мою настоящую проблему, что у меня есть несколько переменных, к которым я должен получить доступ немедленно. Каково было бы решение для вызова сервера для деталей пользователя, а затем получить к нему доступ в любое время? например, в моем приложении я хочу, чтобы боковая панель была выдвинута с именем пользователя и т. д. Нет ли способа вывести переменные типа getUser (userName) или около того? Это грааль, который я ищу, но не знаю, как на самом деле добиться такого рода кода. Извините, если мой вопрос не был достаточно простым.
Показать ещё 5 комментариев
Теги:
jquery-mobile

2 ответа

1
Лучший ответ

Вы можете вернуть интерфейс обещания, открытый с помощью ajax-запроса из вашей функции:

var userName;

function getUser() {
    return $.getJSON(...);
}
getUser().done(function () {
    console.log("test outside function" + window.userName);
});
  • 0
    Добро пожаловать ;)
0

Вы не можете получить доступ к userName вне успеха обратного вызова JSON, так как вы присваиваете значение только дэ в успехе обратного вызова асинхронного метода.

console.log( "test outside function" + window.userName ); // it wont work

Если вы все еще хотите получить доступ немедленно, выполните синхронный вызов, установив одну из ajax-настроек async:false, но общая цель ajax потеряна

Ещё вопросы

Сообщество Overcoder
Наверх
Меню