Door
Mich
op 21-01-2014 10:22
gewijzigd op 22-01-2014 11:55
4.698 views
Beste,
Zoekmachine laat me in deze in de steek.
Ik haal json data op met getJson waarna ik deze 'append' in een list.
Nou wil ik graag zien welke nieuw zijn.
Kan iemand mij hierin helpen? Ik kan geen functie vinden als iets van een 'last inserted'/'insert_id', o.i.d. Wel kom ik op antwoorden om een class toe te voegen en dan hierop te controleren, maar geen idee hoe ik dat mij voor moet stellen.
Bvd
$(document).ready(function() {
call();
var refresh = setInterval(call, 5000);
function call(){
var data;
$.getJSON('call.php?json', function(datanew) {
if(data != datanew){
data = datanew;
$( '#list > ul' ).html( ' ' );
$.each(data, function(index, value) {
$.each(value, function(i, val){
$('#list > ul#'+index).append('<li id="' + i + '">' + val + '</li>');
});
} );
}
});
}
});
Ligt eraan hoe en waar je die variabele hebt gedefinieerd, in welke scope. Zolang functie en variabele binnen dezelfde scope blijven dan kan het. Maar zonder code te zien is het moeilijk te zeggen of het zou moeten werken of niet...
call();
setInterval(call, 5000);
var olddata;
function call(){
$.getJSON('call.php?json', function(data) {
if(olddata !== data){
//
}
$('#status').append( 'New: ' + data.beschikbaar + '<br />');
$('#status').append( 'Old: ' + olddata.beschikbaar + '<br />'); // Hier is olddata leeg. data is wel gevuld.
olddata = data; // olddata vullen
});
}
Ik denk dat het op zich wel werkt, alleen het probleem zal zijn dat bij je eerste call olddata leeg is. olddata.beschikbaar bestaat dus niet en daar zal javascript over vallen. De volgende regel wordt dan nooit uitgevoerd en bij de volgende call zit je dus weer met hetzelfde probleem.
oplossing 1: initieer olddata als:
var olddata = {beschikbaar: ''};
oplossing 2: check of beschikbaar een property van olddata is:
if ('beschikbaar' in olddata){
$('#status').append( 'Old: ' + olddata.beschikbaar + '<br />');
}
Waarschijnlijk omdat op dat moment olddata nog geen object is, maar een lege variabele. Als je olddata dan als:
[code lang="js"]
var olddata = {};
[/code]
definieert zou het wel moeten werken. Dan is het een (leeg) object. Overigens is de tweede manier dan wel netter, want dan krijg je ook geen gebroken code als de result van de server opeens niet helemaal correct is.
Waarschijnlijk omdat op dat moment olddata nog geen object is, maar een lege variabele. Als je olddata dan als:
[code lang="js"]
var olddata = {};
[/code]
definieert zou het wel moeten werken. Dan is het een (leeg) object. Overigens is de tweede manier dan wel netter, want dan krijg je ook geen gebroken code als de result van de server opeens niet helemaal correct is.
Topper! :) Nou werkt oplossing 2 ook. Heel erg bedankt!
Ik denk, maar weet het niet zeker, dat het komt omdat je objecten vergelijkt. Een object is denk ik verschillend op het moment dat ze niet een referentie zijn naar precies hetzelfde object. Ook al hebben ze dezelfde waardes voor hun properties.