0

我尝试使用带有破折号的 ID 来获取有关 JSON 中某些按钮状态的信息,该$. getJson () ID 分为两部分,并将它们输入到数组 regarr 中。但我无法在此查询中从 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);
});

也许有人知道出了什么问题?

4

1 回答 1

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.');
                    }
                });
            }
            /* ... */
        });
    }
});​​​

关于引用错误,当使用存储在变量中的属性名称时,您必须使用[ ]而不是简单的.. 在这种情况下:

代替data.regarr[0].regarr[1]data[regarr[0]][regarr[1]]

于 2012-08-07T11:02:16.920 回答