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}}
如您所见,在通过此网址返回的提供的JSON数据中,“状态”:0:
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();
}
因此,这里的问题是该函数无法正确读取状态值,并且它始终返回null而不是通过url比较返回的值?
这是怎么了?
最佳答案
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
关于javascript - 函数无法正确读取值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32623876/