Article View: pl.comp.lang.java
Article #153668Re: jquery callback i pętla
From: Arivald
Date: Sat, 24 Nov 2012 12:03
Date: Sat, 24 Nov 2012 12:03
57 lines
3061 bytes
3061 bytes
W dniu 2012-11-24 10:47, Piotr Rezmer pisze:
> Arivald pisze:
>
>>
>> Może to głupie pytanie, ale to ma być Java czy JavaScript? Bo poprzedni
>> przykład wyglądał na JavaScript, zaś ten wygląda na Javę.
>
> Sorry, nie bardzo trawię swobodę w Javascripcie i dlatego napisałek
> pseudokod w javie :)
>> Com mniej więcej tak:
>>
>> var JsonLoader = {
>> done: false,
>>
>> function makeAjaxRequest() {
>> $.getJSON("/embedded/WaitForChanges", {
>> extension: "1103",
>> changedate: lastchange,
>> tagmode: "any",
>> format: "json"
>> },
>> this.processJSON
>> );
>> },
>>
>> function processJSON(data) {
>> .....
>> done = .....
>> if (!done) SetTimeOut(this.makeAjaxRequest, 1);
>> }
>>
>> function start() {
>> done = false;
>> SetTimeOut(this.makeAjaxRequest, 1);
>> },
>
> Jasne. Czyli w processJSON() zwalniamy stos w jQuery. Rozumiem, że
> implementacja SetTimeout() jest bezpieczna i nie prowadzi do wyczerpania
> zasobów?
>
Działa jak każdy timer. Wywołanie SetTimeout nie blokuje stosu, a
wywołanie callbacka timera (this.makeAjaxRequest) startuje niejako od
zerowego stosu.
Bardzo możliwe że asynchroniczne wywołanie ajaxowe ($.getJSON) też
zaczyna zawsze od pustego stosu... ale tu nie jestem pewien.
W Twoim oryginalnym kodzie dodatkowym problemem mogła być anonimowe
funkcja. W JavaScripcie jest coś takiego jak "closure", tzn przy
wywołaniu funkcji jej otoczenie, kontekst wywołania może być przenoszony
aby był dostępny z funkcji. Także jeśli funkcja jest wołana
asynchronicznie. I teraz przy kolejnych wywołaniach $.getJSON tworzysz
kolejno anonimową funkcją, kolejny closure który pamięta też poprzednie...
--
Arivald
Technical Details
Message-ID:
<k8qd2q$tbd$1@news.dialog.net.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.supermedia.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mailReferences:
<50aec14a$0$26694$65785112@news.neostrada.pl> <k8n9f6$h2t$1@news.dialog.net.pl> <50afc7d3$0$1302$65785112@news.neostrada.pl> <k8pqqa$le6$1@news.dialog.net.pl> <50b097d3$0$1226$65785112@news.neostrada.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.supermedia.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail From: Arivald <NOSPAMarivald@interia.pl> Newsgroups: pl.comp.lang.java Subject: Re: jquery callback i pętla Date: Sat, 24 Nov 2012 13:03:22 +0100 Organization: Dialog Net Lines: 58 Message-ID: <k8qd2q$tbd$1@news.dialog.net.pl> References: <50aec14a$0$26694$65785112@news.neostrada.pl> <k8n9f6$h2t$1@news.dialog.net.pl> <50afc7d3$0$1302$65785112@news.neostrada.pl> <k8pqqa$le6$1@news.dialog.net.pl> <50b097d3$0$1226$65785112@news.neostrada.pl> NNTP-Posting-Host: dynamic-78-9-151-235.ssp.dialog.net.pl Mime-Version: 1.0 X-Trace: news.dialog.net.pl 1353758618 30061 78.9.151.235 (24 Nov 2012 12:03:38 GMT) X-Complaints-To: abuse@dialog.net.pl NNTP-Posting-Date: Sat, 24 Nov 2012 12:03:38 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/17.0 Thunderbird/17.0 In-Reply-To: <50b097d3$0$1226$65785112@news.neostrada.pl> X-Antivirus: avast! (VPS 121124-0, 2012-11-24), Outbound message X-Antivirus-Status: Clean Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit