JSON的快照输出:
{"control_mode":0.0,"lvl_danger":0.0,"lvl_alert":0.0,"lvl_normal":0.0,"lvl_upStream":0.0,"lvl_warning"
:0.0,"lvl_downStream":0.0,"lvl_control":null,"rtu_supply":false,"elcb_locked":false,"red_phase":false,
"yellow_phase":false,"blue_phase":false,"gen_status":false,"gen_fail":false,"gen_lowFuel":false,"gen_lowOilPressure"
:false,"gen_lowOverSpeed":false,"gen_highTemp":false,"Gate1":{"gateNo":1,"fullOpen":false,"fullClose"
:false,"opening":false,"closing":false,"mode":0,"state":0,"cond":0,"positionM":0.0,"positionP":0.0}}
如您所见," state":0,在通过此url返回的提供的JSON数据中:
var RealDataApi = function () {
var url_getgatedata = "api/realdata/getgatedata";
// public functions
return {
getGateData: function (done, fail, always) {
var jqxhr = $.get(url_getgatedata);
jqXhrHandler(jqxhr, done, fail, always);
},
然后此函数读取状态并根据状态值显示和隐藏图像。
RealDataApi.getGateData(
function (data) {
if (data) {
$("#pDatetime").html(new Date().toLocaleString());
if (data.state == 0)
{
$("#gate1").show();
}
else if (data.state == 2)
{
$("#gate2").show();
}
这里的问题是函数无法正确读取状态值,而不是通过url比较返回的值,它总是返回null? 这里出了什么问题?
答案 0 :(得分:1)
state
是Gate1
的属性。您需要执行data.Gate1.state
(区分大小写,所以不要忘记首都G
)。
一种简单的检查方法是使用JSON Linter,这样可以很好地为您设置格式。
简单示例:
var data = {"control_mode":0.0,"lvl_danger":0.0,"lvl_alert":0.0,"lvl_normal":0.0,"lvl_upStream":0.0,"lvl_warning"
:0.0,"lvl_downStream":0.0,"lvl_control":null,"rtu_supply":false,"elcb_locked":false,"red_phase":false,
"yellow_phase":false,"blue_phase":false,"gen_status":false,"gen_fail":false,"gen_lowFuel":false,"gen_lowOilPressure"
:false,"gen_lowOverSpeed":false,"gen_highTemp":false,"Gate1":{"gateNo":1,"fullOpen":false,"fullClose"
:false,"opening":false,"closing":false,"mode":0,"state":0,"cond":0,"positionM":0.0,"positionP":0.0}}
console.log(data.Gate1.state == 0) // Outputs true