如何在变量中存储从JSON获得的数据?

时间:2016-03-13 05:32:13

标签: javascript jquery json

好吧,我是网络开发的新手,我花了好几个小时试图弄清楚如何将数据存入变量,以便在其他功能中使用它们。

以下是我要做的事情: -

(function($){
var Rows;
var Cols;

 function initBoard(link) {

        $.getJSON(link,function(data){
              Rows=data.nRows;     

  });
  $div = $('#container');
      for(var i = 0; i < Rows; i++) {....}
......

这是一个从JSON文件中绘制网格的长函数。所以最后我调用

$(document).ready(function() {
initBoard("easy.json");
 });

   })(jQuery);

然后它绘制了这个东西。 问题是似乎没有东西存放到我的变量Rows ..

即使我尝试使用警报(行),也没有任何反应。

我尝试了另一个版本: -

(function($){


  var dataR;


    function test(link){

  $.getJSON(link,function(data){
      dataR=data.nCols;
      dataC=data.nRows;
      alert(dataR);  // Gives me 13 as Well, DATA READED and stocked..
  });
     alert(dataR);    // Gives me undefined..
    };

 function initBoard() { .... // 
   the function I call to draw the grid, but I want to use the global var
 dataR inside..
.
.// functions I use 
$(document).ready(function() {
initBoard("easy.json");
test("easy2.json");
 });

 })(jQuery);

感谢您原谅我的提示或帮助。

3 个答案:

答案 0 :(得分:0)

好问题。这是因为,您正在通过异步ajax调用加载数据,并且在加载数据时,您正在执行下一行代码,其中您正在访问尚未初始化的变量,因为ajax调用仍在进行中。

如何解决:要么将代码块放入成功回调中,要么将代码块包装在函数中,并在ajax调用的成功回调中调用此函数。这将导致您,您将能够访问inautited变量。

快乐编码: - )

答案 1 :(得分:0)

在代码顶部的javascript中创建一个全局变量

var _dataToStock;
//your code here
_dataToStock=dataR;//Put this where you get desired value.

现在您可以使用_dataToStock变量来执行其他操作。 在使用之前,请务必检查_dataToStock的值是否为null和undefined。

答案 2 :(得分:0)

试试这个。

var globalVariable = [""];

$(function() {
    initBoard(link);
    printData();
});

 function initBoard(link) {

    $.getJSON(link,function(data){
        var rlen = data.length;

        for (var i = 0; i < rlen; i++)
        {
            globalVariable.push(data[i]);
        }  
    }

});

function printData(){
    try{
        for(i = 0;;i++){
            try{
                if(String(globalVariable[i]) == 'undefined'){
                    break;
                }
            }catch(e){
            }
            alert(globalVariable[i]);
        }
    }catch(e){

    }
}