将ajax响应对象存储在全局变量中---字段丢失

时间:2015-11-10 11:57:52

标签: javascript jquery ajax

我在Grails中实现异步网页,我在其中调用控制器并将响应呈现为D3.js网络。我将对象存储到全局变量中以供进一步使用。返回数据时,该函数工作正常。但是当我稍后尝试使用该对象时,我发现某些字段变为undefined

var similar;

function asynchroNetwork() {
  var jsonData = $.ajax({
    url: "${createLink(controller:'environment', action:'asynchro')}",
    dataType: "json",
    async: true
  }).done(function(jsonData) {

      console.log(jsonData);
      //console.log(jsonText);
      document.getElementById("result").innerHTML="Done";
      console.log(jsonData.all);

      //set global variable
      similar=jsonData;
      console.log("The object got");
      console.log(similar);
      draw();
    });;
}

function draw(){
  console.log(similar);
  //draw the network based on object
}

控制器返回以下JSON:

{
    "\u521B\u4E1A" : {
        "nodes" : [{
                "group" : 1,
                "name" : "\u6c88\u9633\u8f9b\u98962\u4e16"
            }
        ],
        "links" : []
    },
    "all" : {
        "nodes" : [{
                "group" : 1,
                "name" : "qwe25322570"
            }, {
                "group" : 1,
                "name" : "\u660e\u5fb7\u7b03\u884c"
            }, {
                "group" : 1,
                "name" : "\u6c88\u9633\u53ef\u4e50"
            }, {
                "group" : 1,
                "name" : "\u6c88\u9633\u5f6d\u79c0\u8363"
            }, {
                "group" : 1,
                "name" : "\u6c88\u9633\u738b\u632f\u534e"
            }, {
                "group" : 1,
                "name" : "\u6c88\u9633\u8f9b\u98962\u4e16"
            }
        ],
        "links" : [{
                "value" : 1.0,
                "target" : "\u6c88\u9633\u8f9b\u98962\u4e16",
                "source" : "\u660e\u5fb7\u7b03\u884c"
            }, {
                "value" : 1.0,
                "target" : "\u6c88\u9633\u8f9b\u98962\u4e16",
                "source" : "qwe25322570"
            }
        ]
    }
}

draw()函数中,它使用similar[all]绘制图表。但是在links字段中,我看到字段sourcetarget都是undefined,而nodes中的所有字段都很好。

我不认为编码是原因,因为nodes在字段中也包含UTF8字符但没有丢失。从对象函数传回对象后,对象similar没问题,但下次调用draw()时,我可以看到字段links转到undefined

有谁知道这个问题可能是什么原因?我猜它可能与嵌套字段有关。

1 个答案:

答案 0 :(得分:0)

您是否尝试将数据作为参数传递给绘图函数?如果没有,那么:

在你的ajax回调中:

similar = jsonData;
draw(similar) //pass the json

绘制功能:

function draw(json) {
    console.log(json);
}