0

ダッシュ付きのIDを使用してJSONの一部のボタンのステータスに関する情報を取得しようとしましたが、$. getJson () 2つの部分に分割され、配列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格納された参照 (この場合は と呼びます) を使用します。selfthis

$(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]]

于 2012-08-07T11:02:16.920 に答える