Door
Mich
op 21-01-2014 10:22
gewijzigd op 22-01-2014 11:55
4.699 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>');
});
} );
}
});
}
});
Wanneer een nieuw item aan json is toegevoegd en dus bij in de lijst komt na de interval.
Zoals hier een nieuw topic wordt gestart (of ergens op wordt gereageerd) en deze wordt opgehaald bij activiteiten
Met andere woorden, als je de tijd bijhoudt van je laatste call en die weer meestuurt naar de server in de ajax call, dan hoeft de server alleen de nieuwe te selecteren en hoef je clientside niets meer te controleren.
Met andere woorden, als je de tijd bijhoudt van je laatste call en die weer meestuurt naar de server in de ajax call, dan hoeft de server alleen de nieuwe te selecteren en hoef je clientside niets meer te controleren.
Waar en hoe moet ik die tijd dan zetten?
Als ik de lijst ophaal is er nog niks nieuw. Dan zouden die allemaal dus de huidige tijd kunnen krijgen. Pas als er daarna een nieuwe waarde in komt moet deze de op dat moment huidige tijd krijgen en dus nieuw. Deze nieuwe kan dan een class krijgen die bij de volgende call dan weer verdwijnt omdat die niet meer nieuw is...?
Waar komt die lijst vandaan dan? De elementen in de lijst moeten op een zeker moment worden aangemaakt, opgehaald, gevonden etc. Dat tijdstip zal je dan erbij moeten (willen) opslaan.
Waar komt die lijst vandaan dan? De elementen in de lijst moeten op een zeker moment worden aangemaakt, opgehaald, gevonden etc. Dat tijdstip zal je dan erbij moeten (willen) opslaan.
Maar waar komen de elementen vandaan? Die worden er niet op een magische manier ingetoverd neem ik aan. Dus op de plek waar je ze erin zet kan je dan ook nog een veld aan de naam toevoegen: tijdstip. Vervolgens als je de nieuwe lijst wilt hebben loop je 1 keer door de array heen. Als het tijdstip later is dan de vorige call, dan stuur je dat element wel, anders niet. Zo heb je in de browser dus alleen de nieuwe elementen en hoef je niets meer te testen.
Wel zorgen dat je het tijdstip van de server mee terugstuurt naar de browser en de browser dat ook weer laat meesturen met de volgende call. Heb je tenminste geen problemen met tijdzones en andere verschillen tussen browser en server.
Maar waar komen de elementen vandaan? Die worden er niet op een magische manier ingetoverd neem ik aan. Dus op de plek waar je ze erin zet kan je dan ook nog een veld aan de naam toevoegen: tijdstip. Vervolgens als je de nieuwe lijst wilt hebben loop je 1 keer door de array heen. Als het tijdstip later is dan de vorige call, dan stuur je dat element wel, anders niet. Zo heb je in de browser dus alleen de nieuwe elementen en hoef je niets meer te testen.
Wel zorgen dat je het tijdstip van de server mee terugstuurt naar de browser en de browser dat ook weer laat meesturen met de volgende call. Heb je tenminste geen problemen met tijdzones en andere verschillen tussen browser en server.
Die data wordt, zoals je ziet, nou gewoon nog in een Session gezet. Later kan dit dan via een database. Daar zal dan inderdaad een veld bij moeten komen. Ik zal er eens mee experimenteren.
Nou loop ik eerst nog tegen wat anders aan. Is het bij javascript niet zo dat ik een variabele kan vullen en deze bij de volgende call kan oproepen?
Ik maak een var olddata aan buiten de functie, en in de functie controleer ik olddata !== data. En voor het afsluiten van de functie, buiten die controle, doe ik olddata = data. Maar olddata blijft leeg terwijl toch na de 1e interval gevuld zou moeten zijn?
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...