2014-02-06 5 views
-1

У меня есть простой скрипт, чтобы получить идентификатор пользователя PHP session в файл javascript. Но когда я пытаюсь просто предупредить идентификатор пользователя, он говорит undefined?Переменная неопределенная, хотя правильно назначена Думаю

Как показано в коде, я попытался с простым предупреждением проверить данные, возвращаемые из сценария, и это правильно.

var user_id; 

$.get("/ajax/actions/getUserId.php", function(data) { 

    // alert(data); <-- this works correctly 

    var user_id = data; 

}); 

alert(user_id); 

Есть ли лучший способ сделать это?

РНР файл доступен (getUserId.php) просто:

session_start(); 

echo $_SESSION[user_id]; 
+0

Ваше предупреждение запускается до завершения вашего вызова ajax, поэтому user_id не определен в момент запуска предупреждения. –

+1

У вас также есть проблема с областью с переопределением var_ user_id в обратном вызове. –

ответ

2

Вы должны использовать:

$.get("/ajax/actions/getUserId.php", function(data) {  
    var user_id = data; 
    alert(user_id); 
}); 

Аякс асинхронным по умолчанию.

В вашем фрагменте кода проходит через следующие этапы:

  1. Определить переменную user_id в глобальной лексической области
  2. Make GET АЯКС запрос на /ajax/actions/getUserId.php
  3. Алерт значение переменной user_id, которая undefined (по умолчанию вы не задали его значения).
  4. На данный момент Ajax запрос успешно завершен, ваш обратный вызов вызывается, так:
    1. Вы определяете новую переменную с именем user_id, в лексической области обратного вызова
+0

Спасибо, так я могу не использовать переменную user_id вне вызова ajax? Я использовал предупреждение ПОСЛЕ вызова, поскольку мне нужна переменная далее в файле js - или на английском языке, могу ли я сделать вызов ajax до загрузки файла? –

+0

Я включил дополнительные объяснения, вы можете просмотреть его. –

+0

@DarrenSweeney вы можете оставить только второе объявление переменной - одно в обратном вызове ajax. –

2

Ajax является асинхронным, поэтому последнее предупреждение будет выполнено до вызова функции обратного вызова ajax.

Смежные вопросы