0

サーバーからデータを取得してユーザーに表示する webapp を構築しようとしています。スクリプトは 10 秒ごとにサーバーからデータを取得し、データが変更された場合はユーザーに警告します。これは私が現在使用しているコードですが、データが変更されたかどうかにかかわらず、10 秒ごとにアラートを出します。

では、scipt を変更して、古い JSON と新しい JSON を比較し、それらが異なるかどうか、およびユーザーに表示されるデータを更新する前に警告を表示するかどうかを確認するにはどうすればよいですか?

$('#ListPage').bind('pageinit', function(event) {
    getList1();
});
setInterval ( "getList1()", 10000 );
var old = "";

function getEmployeeList1() {
    $.getJSON(serviceURL + 'getemployees.php?' + formArray, function(data) {
        if(data != old){ // data from the server is not same as old
            $('#nollalista li').remove();
            keikka = data.key;
            $.each(keikka, function(index, lista) {
                $('#nollalista').append('<li><a href="employeedetails.html?id=' + lista.IND + '">' +
                        '<h4>' + lista.OSO + '</h4>' +
                        '<p>' + lista.AIKA + '</p>' +'</a></li>');
            });
            $('#nollalista').listview('refresh');

            if(old != "")
                alert("New data!");        
            old = data;
        }
    });
}  
4

2 に答える 2

7

非常に簡単な (しかし、やや不自由な) 解決策は、文字列表現を比較することです。

if(JSON.stringify(a) != JSON.stringify(b)) { ... }
于 2012-04-17T09:54:16.597 に答える
1

比較のため、コードは10秒ごとにアラートを出します

    if(data != old){ // data from the server is not same as old

毎回trueを返します。

このライブラリを使用して、javascript https://github.com/prettycode/Object.identical.jsのjsonを 比較し、比較を次のように変更できます。

    if(!Object.identical(data,old)){ // data from the server is not same as old

利用方法:

var a = { x: "a", y: "b" },
b = { x: "a", y: "b" },
c = { y: "b", x: "a" },
d = { x: "Chris", y: "Prettycode.org", developerYears: [1994, 2011] },
e = { y: "Prettycode.org", developerYears: [1994, 2011], x: "Chris" };
f = { y: "Prettycode.org", developerYears: [2011, 1994], x: "Chris" };
console.log(Object.identical(a, b)); // true (same properties and same property values)
console.log(Object.identical(a, c)); // true (object property order does not matter, simple)
console.log(Object.identical(d, e)); // true (object property order does not matter, complex)
console.log(Object.identical(d, f)); // false (arrays are, by definition, ordered)
于 2012-04-17T10:26:37.860 に答える