[Seaside] Asynchronous update from web server

dtrussardi at tiscali.it dtrussardi at tiscali.it
Wed Apr 10 17:04:59 UTC 2019


> 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



More information about the seaside mailing list