[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