Области видимости переменной и метод jQuery.getJSON () - PullRequest
0 голосов
/ 07 апреля 2010

Кажется, что метод jQuery.getJSON() игнорирует нормальные правила области видимости в JavaScript.

Данный код, такой как этот ...

someObject = {
    someMethod: function(){
        var foo;

        $.getJSON('http://www.somewhere.com/some_resource', function(data){
            foo = data.bar;
        });

        alert(foo); // undefined
    }
}

someObject.someMethod();

Существует ли лучшая практика для доступа кзначение переменной вне области действия getJSON?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2010

Проблема с вашим кодом заключается в том, что foo устанавливается ПОСЛЕ возвращения JSON-запроса (в функции обратного вызова).Перемещение оповещения в обратный вызов решило бы проблему.

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

0 голосов
/ 07 апреля 2010

Это не какая-то странная особенность getJSON(). Это совершенно нормальное поведение JS - в конце концов, вы работаете с функцией обратного вызова. Обратные вызовы, которые выполняются совершенно отдельно и независимо от контекста, в котором они были определены.

Лучше всего, если вы ответите на все правильно в обратном вызове:

someObject = {
  someMethod: function(){
    $.getJSON('http://www.somewhere.com/some_resource', function(data) {
      var foo = data.bar;
      alert(foo);
    });
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...