2015-03-02 94 views
1

我最近一直在調整Z-Wave,並試圖製作一個包含/排除其產品的頁面。但它不太好。我試圖檢查是否存在JSON鍵,然後將其顯示在頁面上。我得到javascript檢查JSON密鑰是否存在並顯示值

TypeError: data.controller is undefined

下面是代碼:

window.setInterval(function(){ 
    getData(); 
}, 2000); 

function getData() 
{ 
var milliseconds = (new Date).getTime(); 
var time = milliseconds.toString().substr(0, milliseconds.toString().length - 3) ; 

$.postJSON("http://192.168.1.102:8083/ZWaveAPI/Data/" + time, function(data) { 
    if(data.controller.lastExcludedDevice.value) alert("EXCLUDED SOMETHING"); 
    if(data.controller.lastIncludedDevice.value) alert("INCLUDED SOMETHING"); 
}); 
} 

$.postJSON = function(url, data, callback, sync) { 

// shift arguments if data argument was omited 
if (jQuery.isFunction(data)) { 
    sync = sync || callback; 
    callback = data; 
    data = {}; 
}; 
$.ajax({ 
    type: 'POST', 
    url: url, 
    data: data, 
    dataType: 'json', 
    success: callback, 
    error: callback, 
    async: (sync!=true) 
}); 
}; 

JSON:

{ 
    "controller.data.controllerState": { 
    "value": 0, 
    "type": "int", 
    "invalidateTime": 1424781697, 
    "updateTime": 1425338938 
    }, 
    "controller.data.lastIncludedDevice": { 
    "value": 42, 
    "type": "int", 
    "invalidateTime": 1424781697, 
    "updateTime": 1425338938 
    }, 
    ...... 

任何幫助是極大的讚賞。

+0

我建議閱讀[訪問/處理(嵌套的)對象,數組或JSON(http://stackoverflow.com/questions/11922383/接入過程嵌套對象陣列或 - JSON)。閱讀有關對象的教程也可能有所幫助:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects – 2015-03-02 23:33:09

+0

考慮使用'parseInt(Date.now()/ 1000,10)'來在幾秒鐘內獲得時間戳 – 2015-03-02 23:35:12

回答

0

試試這個:

if(data.controller && 
    data.controller.lastExcludedDevice.value) 
    alert("EXCLUDED SOMETHING"); 

考慮一下這種方式:console.log({}.x)打印 「不確定」。 console.log({}.x.y)引發錯誤。您可以使用undefined,但如果您嘗試訪問它的屬性,則會引發錯誤。若點是,你需要使用[]符號鍵的一部分

if(a && a.b && a.b.c && a.b.c.d) { 
    console.log("Not an error to print", a.b.c.d); 
}{ 
2

使用&&短路特性,以加快此項檢查。

例如

if (data['controller.data.controllerState'].value) ... 

if (data['controller.data.lastIncludedDevice'].value) ... 
+0

關鍵實際上是'controller.data.lastIncludedDevice'。 – 2015-03-02 23:31:23

+0

@FelixKling true ..我使用的是繼承的代碼.. – 2015-03-02 23:32:40