函数无法正确读取值

时间:2015-09-17 06:33:13

标签: javascript jquery json

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? 这里出了什么问题?

1 个答案:

答案 0 :(得分:1)

stateGate1的属性。您需要执行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