Re: Asynchronous update from web server
Esteban Maringolo <[email protected]>
| Newsgroups | gmane.comp.lang.smalltalk.squeak.seaside |
|---|---|
| Message-ID | <CAJMgPC+X6f1UuEv=bSfBBa_VFYhCy7SNoNcF2AMyL5sDXf+avw@mail.gmail.com> |
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, [email protected] (<[email protected]>) 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, [email protected] > > (<[email protected]>) 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) > >>> > >>> > >>> > >>> > >>> [email protected] 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 > >>>>>> > >>> > >>>> [email protected] > >>> > >>>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside > >>>>> > >>>>> _______________________________________________ > >>>>> seaside mailing list > >>>>> > >>> > >>>> [email protected] > >>> > >>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside > >>>>> _______________________________________________ > >>>>> seaside mailing list > >>>>> > >>> > >>>> [email protected] > >>> > >>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside > >>>> > >>>> > >>>> _______________________________________________ > >>>> seaside mailing list > >>> > >>>> [email protected] > >>> > >>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside > >>> > >>> > >>> > >>> > >>> > >>> -- > >>> Sent from: http://forum.world.st/Seaside-General-f86180.html > >>> _______________________________________________ > >>> seaside mailing list > >>> [email protected] > >>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside > >> > >> _______________________________________________ > >> seaside mailing list > >> [email protected] > >> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside > > _______________________________________________ > > seaside mailing list > > [email protected] > > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside > > _______________________________________________ > seaside mailing list > [email protected] > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside _______________________________________________ seaside mailing list [email protected] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside