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 <[email protected]> wrote: > 2009/6/23 Aamchi <[email protected]>: > > > > > > > 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 <[email protected]> wrote: > >> 2009/6/23 Aamchi <[email protected]> > > >> > 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!" --~--~---------~--~----~------------~-------~--~----~ 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 [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en -~----------~----~----~----~------~----~------~--~---
