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

时间:2014-07-23 11:15:37

标签: javascript jquery json

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

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

我尝试在功能外设置 var myData ,但没有运气.. :(

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

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

请帮忙......

4 个答案:

答案 0 :(得分:12)

不要试图将myData设置为全局变量 - 它不会起作用,因为getJSON是异步的。使用promise

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 () {

  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被缓存为特定于该闭包的全局变量。请注意,其他函数只能在回调完成后才能使用该变量。

答案 1 :(得分:5)

不是创建全局变量,最好在" 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'   
}

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:1)

声明一个全局json对象

var APP = APP || {}

现在,您可以使用

将动态数据设置为该对象
APP.myData = data;

您可以在js文件中的任何位置获取此内容。使用

APP.myData