2015-09-17 2 views
0

щелкнул выход 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}} 

Как вы можете видеть, "состояние": 0, в представленных данных 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, он всегда возвращает нуль? Что здесь не так?

+0

Пожалуйста, добавьте скрипку –

+1

'state', кажется, свойство вложенного объекта, так что вы, вероятно, хотите' data.Gate1.state'. 'data.state', похоже, не существует. * "вместо сравнения возвращаемого значения с url, он всегда возвращает null" * Что именно означает "null" и где? Пожалуйста, дайте полный пример. Например. неясно, когда/где вызывается 'RealDataApi.getGateData'. –

+0

, когда '.Gate1.state' используется, эта ошибка возникает' TypeError: data.gate1 неопределен \t если (data.gate1.state == 1) ' –

ответ

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 
+0

Я пробовал это, но все еще не работает, все еще не читал правильное значение состояния –

+0

Что он возвращает? Тайлер прав 'data.Gate1.state' для доступа к' state'. – Vasyl

+0

Да, это работает, Тайлер прав, потому что есть много ворот, поэтому он не читал состояние из Gate1, но когда указан параметр gate1, он работает. благодаря –

Смежные вопросы