[Seaside] Asynchronous update from web server

Esteban Maringolo emaringolo at gmail.com
Wed Apr 10 17:38:17 UTC 2019


The library is fine and the JQDevelopmentLibrary is just for the
replacement, the setTimeout() and interval() are part of the built-in
functions in all browsers and comes in the Javascript package of
Seaside itself.

Can you share the code you're using? Is it exactly the same example I
sent a few mails back?

Regards,

Esteban A. Maringolo


El mié., 10 abr. 2019 a las 14:05, dtrussardi at tiscali.it
(<dtrussardi at tiscali.it>) escribió:
>
>
> > Which version of Seaside are you using?
>
>         I using the Seaside 3.2.2   on Pharo 7.0-64-1262
>
>
> > I can see that #timeout: is the deprecated implementation of the
> > #setTimeout: method of latest Seaside releases, and it instantiates a
> > JSTimeout object whose #javascriptContentOn: is as follows:
>
>         The following code is identical
>
> > JSTimeout>>javascriptContentOn: aStream
> >  aStream nextPutAll: 'setTimeout(function(){'.
> >  super javascriptContentOn: aStream.
> >  aStream
> >    nextPutAll: '},';
> >    javascript: self duration;
> >    nextPut: $)
> >
> > So in theory it should do the same thing.
> >
> > Did you try my attached example replacing the #setTimeout: call by the
> > #timeout: equivalent?
>
>         Yes, don't works
> >
> > Are you replacing the right DOM element in #scriptBannerUpdateOn: ?
>
>         Yes.  With interval:  is right update   ( therefore the reference is correct )
>
>
>
>         But which libraries should I add when register the application?
>
>         I register it with:
>
>                 app := WAAdmin register: self asApplicationAt: 'recursiveTimeout'.
>
>                 app addLibrary: JQDevelopmentLibrary
>
>         it's right?
>
>         Thanks,
>
>                 Dario
>
> > Regards,
> >
> > Esteban A. Maringolo
> >
> > El mié., 10 abr. 2019 a las 12:36, dtrussardi at tiscali.it
> > (<dtrussardi at tiscali.it>) escribió:
> >>
> >> Ciao,
> >>
> >>
> >>> Shouldn't your script have two < instead of one?  Like this:
> >>
> >>        it's an error in the email.
> >>
> >>        The code is right,
> >>
> >>                but with                 timeout:           the banner is not update.
> >>
> >>                with             interval:      it is update.
> >>
> >>        considerations ?
> >>
> >>        Thanks,
> >>
> >>                Dario
> >>
> >>>
> >>> scriptUpdaterOn: aJSScript
> >>>                 aJSScript <<
> >>>                        ((aJSScript jQuery ajax
> >>>                         script: [ :s |
> >>>                                       self shouldUpdate ifTrue: [ self
> >>> scriptBannerUpdateOn: s ].
> >>>                         ]) timeout: 1 minute)
> >>>
> >>>
> >>>
> >>>
> >>> dtrussardi at tiscali.it wrote
> >>>> Ciao,
> >>>>
> >>>>> But using interval() is wrong. You're creating one new interval on every
> >>>>> call! And it doesn't have to be recursive.
> >>>>>
> >>>>> Maybe instead of #setInterval: it is #interval: in your image.
> >>>>
> >>>>     You mean      timeout:
> >>>>
> >>>>     But with:
> >>>>
> >>>>
> >>>>             scriptUpdaterOn: aJSScript
> >>>>                aJSScript <
> >>>>                        ((aJSScript jQuery ajax
> >>>>                         script: [ :s |
> >>>>                                       self shouldUpdate ifTrue: [ self
> >>>> scriptBannerUpdateOn: s ].
> >>>>                        ]) timeout: 1 minute)
> >>>>
> >>>>             i don't have any updating.
> >>>>
> >>>>     With:   scriptUpdaterOn: aJSScript
> >>>>                             aJSScript <
> >>>>                              ((aJSScript jQuery ajax
> >>>>                                       script: [ :s |
> >>>>                                             self shouldUpdate ifTrue: [ self
> >>>> scriptBannerUpdateOn: s ].
> >>>>                                             self scriptUpdaterOn: s
> >>>>                        ]) timeout: 1 minute)
> >>>>
> >>>>     i have strange behavior.
> >>>>
> >>>>     The browser application go to 50% of CPU.
> >>>>
> >>>>     Thanks,
> >>>>
> >>>>             Dario
> >>>>
> >>>>>
> >>>>> Regards,
> >>>>>
> >>>>> El mar., 9 de abr. de 2019 11:30,
> >>>
> >>>> dtrussardi@
> >>>
> >>>> <
> >>>
> >>>> dtrussardi@
> >>>
> >>>> > escribió:
> >>>>> Ciao,
> >>>>>
> >>>>>       thanks.
> >>>>>
> >>>>>> El lun., 8 abr. 2019 a las 7:48,
> >>>
> >>>> dtrussardi@
> >>>
> >>>>>> (<
> >>>
> >>>> dtrussardi@
> >>>
> >>>> >) 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 .squeakfoundation
> >>>
> >>>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> >>>>>
> >>>>> _______________________________________________
> >>>>> seaside mailing list
> >>>>>
> >>>
> >>>> seaside at .squeakfoundation
> >>>
> >>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> >>>>> _______________________________________________
> >>>>> seaside mailing list
> >>>>>
> >>>
> >>>> seaside at .squeakfoundation
> >>>
> >>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> seaside mailing list
> >>>
> >>>> seaside at .squeakfoundation
> >>>
> >>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> --
> >>> Sent from: http://forum.world.st/Seaside-General-f86180.html
> >>> _______________________________________________
> >>> seaside mailing list
> >>> seaside at lists.squeakfoundation.org
> >>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> >>
> >> _______________________________________________
> >> seaside mailing list
> >> seaside at lists.squeakfoundation.org
> >> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> > _______________________________________________
> > seaside mailing list
> > seaside at lists.squeakfoundation.org
> > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside


More information about the seaside mailing list