簡體   English   中英

JavaScript將數據從json獲取到全局變量

[英]JavaScript get data from json to a global variable

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

在我的函數中我得到了json對象,但我想從其函數范圍的外側訪問myData變量。

我試過在函數外設置var myData但沒有運氣.. :(

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

如何將此變量設置為全局?

請幫忙...

不要嘗試將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 () {

  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被緩存為特定於該閉包的全局變量。 請注意,其他函數只有在回調完成后才能使用該變量。

而不是創建全局變量,最好在“完成”上調用回調,如下所示:

$.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'   
}

您可以使用回調以便從成功塊中獲取數據

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

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

聲明一個全局json對象

var APP = APP || {}

現在,您可以使用動態數據設置該對象

APP.myData = data;

您可以在js文件中的任何位置獲取此信息。 通過使用

APP.myData

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM