0

わかりました、興味深い問題があります。私のページは時々 JSON リクエストを行います。データが変更されていない場合は、何もする必要はありません。問題は、変更されたかどうかを証明する方法がわかりません。

私は無駄にこのようなことを試しました:

var ステーション = null;

function parseDynamicData(ard) {
    //this was something that gave me problems for days
    //nice little hack to fix it
    if (ard['details']['enabled'] == 'true' && ard['song']['art'] != 'undefined');
    {
        //turns off the 'server offline' page
        if (document.location.toString().indexOf('#offline') != -1)
            document.location = '/#tracks';
        //update UI
        $('#track-title').html(htmlDecode(ard['song']['title']));
        $('#track-artist').html(htmlDecode(ard['song']['artist']));
        $('#track-album').html(htmlDecode(ard['song']['album']));
        $('#track-art').attr('src', htmlDecode(ard['song']['art']));
        //set if it's play or pause visible
        if (htmlDecode(ard['details']['playing']) == 'true') {
            $('#control-pauseplay').html('Pause');
            $('#control-pauseplay').attr('href', '/track?proc=2');
        } else {
            $('#control-pauseplay').html('Play');
            $('#control-pauseplay').attr('href', '/track?proc=3');
        }
        //Now update all of the stations
        if (stations == null || stations != ard['stations']) {
            $.each(ard['stations'], function (key, value) {
                alert(key);
            });
            stations = ard['stations'];
        }
    }
}

通常の JSON 応答は次のようになります。

{
    "song": {
        "art": "http://cont-sjl-1.pandora.com/images/public/amz/6/2/3/3/886978533326_500W_500H.jpg",
        "title": "Hold It Against Me",
        "artist": "Britney Spears",
        "album": "Femme Fatale Deluxe"
    },
    "details": {
        "playing": "true",
        "enabled": "true"
    },
    "stations": {
        "undefined": "False",
        "Alex Clare Radio": "False",
        "Rap Strength Training Radio": "False",
        "Drops Of Jupiter Radio": "False",
        "Tween Radio": "False",
        "Today's Hits Radio": "True"
    }
}

ただし、何をしても、すべてのキーに対してアラートを作成する JSON を通過します。私が何をすべきか知っている人はいますか?

4

2 に答える 2

1

JSON.Stringify を使用できますか? 明らかに、JSON リクエストから返されるのは JSON であり、最後のリクエストを実際のオブジェクトに変換したと仮定します。だからただ電話してください:

JSON.Stringify(Object) === JSONresult

2 つの文字列を比較します。

于 2012-06-11T14:30:46.287 に答える
1

とは同じ構造の別のオブジェクトだstationsと思います。の の配列を保持している間に各 JSON リクエストの後ard['stations']に再構築する場合、2 つのオブジェクトは同じオブジェクトではないため、オブジェクトのキーと値のペアが同一であるかどうかに関係なく、完全一致は失敗します。ardstations ard

私がすることは、最後の JSON メッセージの正確な文字列コピーを保持し、それを解析する前に現在の JSON 文字列メッセージと比較することです。それ以外の場合は、現在のオブジェクトのすべてのキーと値のペアを将来の新しいオブジェクトと比較する必要があります。これらの値の一部がオブジェクト自体である場合、物事は少し (不必要に) 複雑になる可能性があります。

サーバーが常に特定のオブジェクトを同じ方法で文字列化することが確実である場合(クライアント上のオブジェクトが変更されたかどうかを確認することを心配する必要がないと仮定すると)、次の JSON 文字列バージョンを単純に比較できます。サーバーからのオブジェクト。

于 2012-06-11T14:39:30.390 に答える