[Seaside] Asynchronous update from web server
dtrussardi at tiscali.it
dtrussardi at tiscali.it
Tue Apr 9 14:30:13 UTC 2019
Ciao,
thanks.
> El lun., 8 abr. 2019 a las 7:48, dtrussardi at tiscali.it
> (<dtrussardi at tiscali.it>) escribió:
>
>> In my case i haven't any user actions on the client.
>> The client display some data with dynamic banner ( marquee tag )
>> and i need to update it only when the data to display change from the server.
>> When the data on the server relative to an banner change i need to force the clients banners update.
>> it seems to me that your initial solution may be fine.
>>
>> What do you think?
>
> Too complex for such a simple task.
>
> Is the <marquee> tag still a thing? I though it dissapeared when
> Geocities closed. :)
>
> See below my suggestion.
>
>
>> Another solution could be to manage an client ajax request with a specific interval
>> but update the relative banner div only if the related data received from the server changed.
>> ( But how i can manage it?
>> Can i not reply to an client ajax request
>> or respond to doing nothing and continue to view the current status )
>
> You can have a recursive call to setInterval() that returns a script
> (javascript) that updates the mentioned banner, and if no update is
> necessary you do nothing. Doing it once per minute is nothing for the
> server, since it's a simple AJAX call, which if nothing needs
> updating, is fast to answer.
>
> These are the key parts:
>
> renderContentOn: html
> self renderBannerOn: html.
> html script: (html jQuery script: [ :script | self scriptUpdaterOn: script ])
>
> scriptUpdaterOn: aJSScript
> aJSScript <<
> ((aJSScript jQuery ajax
> script: [ :s |
> self shouldUpdate ifTrue: [ self scriptBannerUpdateOn: s ].
> self scriptUpdaterOn: s ]) setTimeout: 1 minute)
The setTimeout is not implemented in my system.
With timeout: i have some problematic.
I change the scriptUpdaterOn: aJSScript to:
scriptUpdaterOn: aJSScript
aJSScript <
((aJSScript jQuery ajax
script: [ :s |
self shouldUpdate ifTrue: [ self scriptBannerUpdateOn: s ].
]) interval: 1 minute)
It works very well relatively to my current needs.
Dario
>
> scriptBannerUpdateOn: s
> s << ((s jQuery id: 'banner') replaceWith: [ :h | self renderBannerOn: h ])
>
> Attached to this mails goes a working example of this.
>
> In #scriptBannerUpdateOn: I would put all the logic, even by replacing
> the whole component as a whole (sometimes the best compromise) or
> indidividual elements within it).
>
>
>
> Regards,
>
> Esteban A. Maringolo
> <EAMRecursiveTimeout.st>_______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
More information about the seaside
mailing list