Re: Asynchronous update from web server

"[email protected]" <[email protected]>
Newsgroups gmane.comp.lang.smalltalk.squeak.seaside
Message-ID <[email protected]>
> 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@
>>> 
>>>> &lt;
>>> 
>>>> dtrussardi@
>>> 
>>>> &gt; escribió:
>>>>> Ciao,
>>>>> 
>>>>>       thanks.
>>>>> 
>>>>>> El lun., 8 abr. 2019 a las 7:48,
>>> 
>>>> dtrussardi@
>>> 
>>>>>> (&lt;
>>> 
>>>> dtrussardi@
>>> 
>>>> &gt;) 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.