2012-01-13 2 views
0

Я должен делать что-то неправильно. Я надеялся, что приведенный ниже код обновит и получит доступ к глобальной переменной gvar, но это не так. Что я делаю неправильно?Обновление Javascript и внешняя функция доступа

<script type="text/javascript"> 
    var gvar; 
    $(function() {      
     $(document).ready(function() { 
      $.getJSON("json.php", function (myData) { 
       $.each(myData.tag, function (t, myData) { 
        if(myData.myId != null) { 
         gvar = myData.myId; 
        } 
       }); 
       return false; 
      }) 
     }); 
    }); 
</script> 

<script type="text/javascript"> 
    alert(gvar); 
</script> 
+0

Вы испытали предупреждение (gvar); вне функции? – Dev

+2

Является ли это опечаткой в ​​вашем примере кода? Вы предупреждаете (myId), а не alert (gvar). Помимо этого он должен работать. – Archer

+0

Да, извините, опечатка ... должна быть предупреждена (gvar) ... все равно ничего не возвращает, хотя – echez

ответ

3

gvar только заселяется, как только дом будет готов. Однако предупреждение выполняется, как только эта часть кода анализируется. Попробуйте поставить предупреждение в конце функции ready().

@ У Yoshi есть еще одна хорошая точка. Я просто пропустил: Население переменной даже задерживается до тех пор, пока запрос не будет выполнен успешно. Чтобы проверить это, вы можете установить тайм-аут в несколько секунд, а затем предупредить переменную. Запрос должен был быть завершен к тому времени, и переменная будет иметь значение, которое можно предупредить. Но это только для того, чтобы проверить, работает ли переменная в глобальной области или нет, потому что, предупреждая внутри обратного вызова, конечно, переменная была установлена ​​прямо над предупреждением. ;)

+0

У меня есть исправление, но, по-видимому, я не могу отправить код в качестве ответа до 6 часов. В любом случае, большое спасибо, ребята! – echez

+0

Помог ли мой ответ? Возможно, вы можете описать свое решение в кратком комментарии. – Connum