Как получить значение переменной JavaScript внутри функции? - PullRequest
1 голос
/ 19 августа 2010

Я использую функцию JQuery getJSON для получения данных в формате JSON.

Эти данные будут использоваться вместе с API JavaScript YouTube: http://code.google.com/apis/youtube/js_api_reference.html

Данные JSONне вытащил с ютуба.Это простой рукописный список идентификаторов видео YouTube и названий, которые перечислены в CSV.Я использую PHP для чтения CSV и создания объекта JSON.

Корень проблемы в том, что когда я помещаю любой код JavaScript JavaScript YouTube в «document.ready», код YouTube загадочным образом прекращается.работать.

Я получил полноценный проигрыватель для работы (с JSON, включенным на HTML-странице), но теперь я сталкиваюсь с этим препятствием, пытаясь экстернализировать данные (используйте $ getJSON).Чтобы мой проигрыватель работал, мне нужно сначала иметь код JQuery и внутри document.ready.Далее мне нужен код плеера YouTube, и он должен находиться за пределами документа .ready.

Вот моя неудачная попытка получить данные, возвращаемые $ getJSON:

$(document).ready(function(){

 $.getJSON('bar.php', function(data) {
     var baz = data;
            return baz;
 }); // getJSON

}) // ready
console.log("baz: " + baz);

Как узнать значение баз?

Ответы [ 3 ]

1 голос
/ 19 августа 2010

В этом случае вы не можете по двум причинам.

Первое, что можно обойти, заключается в том, что scope переменной является анонимной функцией, которая формирует второй аргумент для метода getJSON.

Вторым, с которым труднее справиться, является то, что асинхронный JavaScript и XML асинхронный . Метод getJSON запускает загрузку, но затем скрипт продолжает работать. Строка console.log достигается до того, как baz будет присвоено значение.

Любая сложная программа, написанная на JavaScript, будет управляемой событиями. Когда вы запускаете что-то в движение (например, Ajax-вызов), вы должны обработать результаты этого с помощью метода обратного вызова.

Делайте все, что нужно, в анонимной функции, которую вы передаете getJSON (или в другой функции, вызываемой оттуда).

0 голосов
/ 19 августа 2010

jQuery.getJSON является сокращением для вызова AJAX:

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

Таким образом, вам придется работать с данными внутри обратного вызова или с любым кодом, который требует, чтобы эти данные вызывались из обратного вызова.

$(document).ready(function(){
  $.getJSON('bar.php', function(data) {
    var baz = data;
    console.log(baz);
  }); // getJSON
}) // ready
0 голосов
/ 19 августа 2010

Почему вы не можете делать то, что хотите, с возвращенными данными в функции getJSON?

$(document).ready(function(){
     $.getJSON('bar.php', function(data) {
          // Use data...
          alert("I'm in your function processing your data");
     }); 
});
...