[Seaside] Asynchronous update from web server

dtrussardi at tiscali.it dtrussardi at tiscali.it
Wed Apr 10 15:36:48 UTC 2019


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



More information about the seaside mailing list