JavaScript将数据从json获取到全局变量

JavaScript将数据从json获取到全局变量,javascript,jquery,json,Javascript,Jquery,Json,在我的函数中,我得到了json对象,但我想从函数范围之外访问myData变量 我曾尝试在函数外部设置var myData,但没有成功( 我不熟悉JSON,我需要解析吗 如何将此变量设置为全局变量 请帮助…您可以使用回调从成功块中获取数据 function test(){ $.getJSON( "notebook-json-data.php", function( data ) { var myData = data; }); } 不要尝试将myData设置为全局

在我的函数中,我得到了json对象,但我想从函数范围之外访问
myData
变量

我曾尝试在函数外部设置
var myData
,但没有成功(

我不熟悉JSON,我需要解析吗

如何将此变量设置为全局变量


请帮助…

您可以使用回调从成功块中获取数据

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

不要尝试将
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);
});
编辑

由于要在代码的其他区域使用数据,请使用闭包创建一个环境,使变量不会泄漏到全局空间。例如,使用回调:

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);
});

myData
被缓存为特定于该闭包的全局变量。请注意,只有在回调完成后,其他函数才能使用该变量。

与其创建全局变量,不如在“完成”时调用回调,如下所示:

(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);
  }

});
有关详细信息

问题在于getJSON是异步的,所以当getJSON处理数据时,代码的执行仍在继续

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

声明一个全局json对象

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'   
}
现在,您可以使用设置该对象的动态数据

var APP = APP || {}
您可以在js文件中的任何位置获取此信息


APP.myData

var myData
函数外部,函数内部不重复
var
(这将创建一个新的阴影
myVar
)。请记住,调用是异步的,因此您不能在
getJSON
call之后简单地访问它。不要用变量污染全局范围。将回调传递到
test()中
INSTEAD您可以将其设置为您想要的全局变量,但由于ajax是异步的,所以在回调之外仍然无法访问它!可能会出现这样的情况:在getJSON方法读取JSON之前,您正在尝试读取变量。这是异步调用。您需要等待此函数完成其过程。我希望使用的数据是其他几个变量er函数..如果我这样做了,是否每次都会向服务器发送json请求?
function autoPopulate(field,id){test(function(data){myData=data;console.log(myData);});}
当我在html中多次调用该函数时,每次都会向服务器发送请求以加载“notebook json data.php”?缓存数据或首次预加载并使用的任何可能方法?我的编辑允许您将数据缓存在
myData
-一个全局变量中,但仅限于该闭包。+1用于显示异步调用如何导致未定义。这是我使用的模式,不理解未定义结果的原因。