Подтвердить что ты не робот

JavaScript получает данные от json до глобальной переменной

function test(){
    $.getJSON( "notebook-json-data.php", function( data ) {
       var myData = data;
    });
 }

Здесь, в моей функции, я получаю json-объекты, но хочу получить доступ к переменной myData из области действия своей функции.

Я попытался установить var myData вне функции, но не повезло..: (

Я не знаком с JSON, мне нужен какой-то синтаксический анализ?

как установить эту переменную как глобальную?

Пожалуйста, помогите...

4b9b3361

Ответ 1

Не пытайтесь установить myData в качестве глобальной переменной - это не сработает, потому что getJSON является асинхронным. Либо используйте :

function test() {
  return $.getJSON('notebook-json-data.php');
}

$.when(test()).then(function (data) {
  console.log(data);
});

Или обратный вызов:

function test(callback) {
  $.getJSON('notebook-json-data.php', function (data) {
    callback(data);
  });
}

test(function (data) {
  console.log(data);
});

Edit

Поскольку вы хотите использовать данные в других областях вашего кода, используйте закрытие, чтобы создать среду, в которой ваши переменные не просачиваются в глобальное пространство. Например, с обратным вызовом:

(function () {

  var myData;

  function test(callback) {
    $.getJSON('notebook-json-data.php', function (data) {
      callback(data);
    });
  }

  test(function (data) {
    myData = data;
    autoPopulate('field', 'id');
  });

  function autoPopulate(field, id) {
    console.log(myData);
  }

});

myData кэшируется как глобальная переменная, специфичная для этого закрытия. Обратите внимание, что другие функции смогут использовать эту переменную только после завершения обратного вызова.

Ответ 2

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

function test(callback){
    $.getJSON( "notebook-json-data.php", function( data ) {
       callback(data);
    }
 }

test(function(data){
  //Use your data here
});

Ответ 3

Вместо создания глобальных переменных лучше вызвать обратный вызов на "done", например:

$.getJSON( "example.json", function(data) {
    console.log( "json loaded" );
    foo(data); 
})
.done(function() {
   console.log("");
   foo1(data);
});

Для получения дополнительной информации getJSON API.

Проблема заключается в том, что getJSON является асинхронным, поэтому, когда getJSON обрабатывает данные, выполнение вашего кода продолжается.

function test(a){
    $.getJSON( "notebook-json-data.php", function( data ) {
       a = data;
    }
}

var main = function() {
  var a; 
  test(a);         /* asynchronous */
  console.log(a);  /* here, json could be hasn't already finish, most likely, so print 'undefined'   
}

Ответ 4

Объявить глобальный объект json

var APP = APP || {}

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

APP.myData = data;

Вы можете получить это в любом месте вашего js файла. используя

APP.myData