我在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
字段中,我看到字段source
和target
都是undefined
,而nodes
中的所有字段都很好。
我不认为编码是原因,因为nodes
在字段中也包含UTF8字符但没有丢失。从对象函数传回对象后,对象similar
没问题,但下次调用draw()
时,我可以看到字段links
转到undefined
。
有谁知道这个问题可能是什么原因?我猜它可能与嵌套字段有关。
答案 0 :(得分:0)
您是否尝试将数据作为参数传递给绘图函数?如果没有,那么:
在你的ajax回调中:
similar = jsonData;
draw(similar) //pass the json
绘制功能:
function draw(json) {
console.log(json);
}