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