2009/6/24 Aamchi <aman.ra...@googlemail.com>: > > Hi Richard, > > Your example works perfectly :-) > > Just a few minor things that I had to change to make it actually work > (not being fussy, just if someone else finds this useful as well and > wants to try it out): > > -The this operator didn't work for me, I replaced it with o_Updater > - In the PHP the array key which stores the hash is 'Hash' and not > 'thisHash', so replace thisHash with Hash in the js-code > - And when updating hash: o_Updater.options.lastHash = o_JSON.thisHash > (instead of o_Updater.options.lastHash != o_JSON.thisHash) > > Thanks again. > > Aman > > > > On 24 Jun., 12:12, Richard Quadling <rquadl...@googlemail.com> wrote: >> 2009/6/23 Aamchi <aman.ra...@googlemail.com>: >> >> >> >> >> >> > Thanks, for your response. I'm not 100% sure if I understand correctly >> > what you mean. If I get some data and generate a hash and write this >> > to the JSON header and retrieve this when calling onSuccess, how will >> > I still have the previous hash? From where will I get this? Won't the >> > updated data cause the hash to be overwritten in the JSON header? Or >> > do I have to send two hashes always and compare them? >> >> > On 23 Jun., 22:57, Richard Quadling <rquadl...@googlemail.com> wrote: >> >> 2009/6/23 Aamchi <aman.ra...@googlemail.com> >> >> >> > Hi, >> >> >> > I was wondering if Ajax.PeriodicalUpdater can detect if content has >> >> > changed since the last update and if so trigger an event. >> >> >> > So for example I have a scoreboard which fetches data every 5 seconds >> >> > and displays this. I would be cool if there could be some kind of >> >> > notification if content had changed. I know that the new content is >> >> > stores in responseText but how can I compare it to the previous >> >> > content... >> >> >> > Thanks, >> >> > Aman >> >> >> Personally, I would do this server side. >> >> Assuming you get the data in some sort of structure before either rending >> >> some HTML and sending it or just sending it JSON'd, then you should be >> >> able >> >> to build a hash of the data. >> >> >> See [1] for info on Hash Functions. >> >> >> So. If you sent the hash value in a X-JSON header along with an >> >> onSuccess() >> >> callback, you can extract the hash from the second param to the onSuccess >> >> and compare this with the previously retrieved hash to indicate you've got >> >> changed data. See [2] for details about PeriodicalUpdater update >> >> notification and [3] for the parameters to common callbacks. >> >> >> Regards, >> >> >> Richard. >> >> >> [1]http://en.wikipedia.org/wiki/Hash_function >> >> [2]http://www.prototypejs.org/api/ajax/periodicalUpdater >> >> <http://www.prototypejs.org/api/ajax/periodicalUpdater>[3]http://www.prototypejs.org/api/ajax/options >> >> <http://www.prototypejs.org/api/ajax/options> >> >> >> -- >> >> ----- >> >> Richard Quadling >> >> Zend Certified Engineer :http://zend.com/zce.php?c=ZEND002498&r=213474731 >> >> "Standing on the shoulders of some very clever giants!" >> >> You add a >> >> previousHash:null; >> >> to your periodic updater and check that value against the one coming >> in via the X-JSON header. >> >> If it is different, then the data is different. If it is the same, >> then the data is the same. >> >> Either way, once evaluated, same the new hash. >> >> Untested (sorry), but adapting the example at [1] ... >> >> var o_Updater = new Ajax.PeriodicalUpdater >> ( >> 'lastLogin', >> '/lastLogin.php', >> { >> method : 'get', >> frequency : 3, >> decay : 2, >> lastHash : null, >> onSuccess : function(o_Transport, o_JSON) >> { >> // Do we have JSON? >> if (!!o_JSON) >> { >> // Do we have a previous hash? >> if (!!this.options.lastHash && >> (this.options.lastHash != o_JSON.thisHash)) >> { >> // Hashes are different. Maybe >> activate an effect to show the >> highlighted data and slowly fade away over time. >> } >> // Update hash. >> this.options.lastHash != o_JSON.thisHash; >> } >> } >> } >> ); >> >> The code on the server would be something like this (I'm using PHP). >> >> <?php >> // Assume we are getting this data from a database. >> $a_Data = array >> ( >> 'Name' => 'Richard Quadling', >> 'LastPost' => '2009-06-24 10:00:00', >> ); >> >> // Build hash >> $s_Hash = array('Hash' => md5(serialize($a_Data))); >> >> // Generate output. >> $s_Output = >> "<tbody><tr><td>{$a_Data['Name']}</td><td>{$a_Data['LastPost']}</td></tbody>"; >> >> // X-JSON Header >> header('X-JSON: ' . json_encode($s_Hash, JSON_FORCE_OBJECT)); >> >> // Output results. >> echo $s_Output; >> ?> >> >> The PHP outputs (edited) ... >> >> X-JSON: {"Hash":"a0c23e7f9651f2b65135932917b7f03a"} >> Content-type: text/html >> >> <tbody><tr><td>Richard Quadling</td><td>2009-06-24 10:00:00</td></tbody> >> >> So the X-JSON header is presented as o_JSON in onSuccess() and >> o_JSON.Hash is 'a0c23e7f9651f2b65135932917b7f03a' >> >> And the HTML would go to the container you defined in the PeriodicUpdater >> >> Richard. >> >> -- >> ----- >> Richard Quadling >> Zend Certified Engineer :http://zend.com/zce.php?c=ZEND002498&r=213474731 >> "Standing on the shoulders of some very clever giants!" > > >
Sorry for the typos. And I forgot to bind this to the onSuccess. So, a fixed-up version (hopefully) ... new Ajax.PeriodicalUpdater ( 'lastLogin', '/lastLogin.php', { method : 'get', frequency : 3, decay : 2, lastHash : null, onSuccess : (function(o_Transport, o_JSON) { // Do we have JSON? if (!!o_JSON) { // Do we have a previous hash? if (!!this.options.lastHash && (this.options.lastHash != o_JSON.Hash)) { // Hashes are different. Maybe activate an effect to show the highlighted data and slowly fade away over time. } // Update hash. this.options.lastHash = o_JSON.Hash; } }).bind(this) } ); -- ----- Richard Quadling Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731 "Standing on the shoulders of some very clever giants!" --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Prototype & script.aculo.us" group. To post to this group, send email to prototype-scriptaculous@googlegroups.com To unsubscribe from this group, send email to prototype-scriptaculous+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en -~----------~----~----~----~------~----~------~--~---