2012-08-07 65 views
0

我試圖通過使用$. getJson() ID獲取有關JSON中某些按鈕狀態的信息,其中破折號分爲兩部分,並且它們輸入到數組regarr中。 但我不能從JSON在此查詢得到的數據:無法訪問數據JSON,使用變量

data.regarr[0].regarr [1] //regarr is undefined 

HTML:

<div class='buttons' id='lamps-fire1'>OFF</div> 

我的JSON:

{"lamps":{"fire1":"off","fire2":"off","fire3":"off"},"motor":"on","temperature":"12"} 

的JavaScript

$(document).ready(function() 
{ 
    function reloadvalues() 
    { 
     $('.buttons').each(function() 
     { 
       var id=$(this).attr('id'); 
       var re=/-/; 
       var re2=/[a-z0-9]{1,}[^-][a-z0-9]{1,}/ig; 
       var regarr=[]; 
       regarr=id.match(re2); 
       if (id.search(re)==-1) 
       { 
        $.getJSON('homeapi.ini','tire=none&id='+encodeURIComponent(id),function (data) 
        { 
        if (data.motor=='off') 
        { 
         $(this).html('OFF.'); 
        } 
        else{ 
         $(this).html('ON.'); 
        } 
        }); 
       } 
       else{ 
        $.getJSON('homeapi.ini','',function (data) 
        { 
        if ((regarr[1]!='undefined')||(regarr[0]!='undefined')||(regarr !='undefined')) 
        { 
        if (data.regarr[0].regarr[1]=='off') 
        { 
         $(this).html('OFF.'); 
        } 
        else{ 
         $(this).html('ON.'); 
        } 
        } 
       }); 
       } 
      }); 
    } 
    setInterval(function(){ 
     reloadvalues(); 
     },5000); 
}); 

也許有人知道什麼地方出了錯?

+0

等待有沒有在您的數據JSON關鍵regarr是嗎?你可能想像數據一樣[regarr [0]] [regarr [1]] ... – Onheiron 2012-08-07 11:02:54

回答

1

參考this在回調函數範圍內不一樣,因爲它在每個循環內。在輸入子功能之前,您必須緩存對其的引用。然後,在你$.getJSON方法回調函數塊內,使用存儲引用(在這種情況下,我把它叫做self),而不是this

$(document).ready(function() { 
    function reloadvalues() { 
     $('.buttons').each(function() { 
      var self = this; 

      /* ... */ 
      if (id.search(re) == -1) { 
       $.getJSON('homeapi.ini', 'tire=none&id=' + encodeURIComponent(id), 
       function(data) { 

        if (data.motor == 'off') { 
         $(self).html('OFF.'); 
        } 
        else { 
         $(self).html('ON.'); 
        } 
       }); 
      } 
      /* ... */ 
     }); 
    } 
});​​​ 

關於引用錯誤,使用存儲在變量屬性的名稱時,你必須使用[ ]而不是簡單的.來取消引用json對象。 在這種情況下:

更換data.regarr[0].regarr[1]data[regarr[0]][regarr[1]]

+0

Hello.But現在在Firebug中:TypeError:data.regarr未定義 if(data.regarr [0] .regarr [1] == 'OFF')。沒有什麼改變:( – Zamony 2012-08-07 11:09:42

+0

@ user1581652剛更新我的答案,包括 – nbrooks 2012-08-07 11:15:22

+0

沒有錯誤!但我有一個問題。當我更改JSON數據到服務器,更改不會出現在頁面上。這是我的代碼:pastebin.com/AyT2b8hy – Zamony 2012-08-07 11:50:43