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!"
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to