Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

wait/delay/??

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: wait/delay/??

Autor: peta1

12:11:42 13.10.2011

designerrr - Vim, zes to psal. Prave proto se divim, co tu dal resite, jako. Zkus uvest priklad, jak to ma vypadat po sekundach. Google to prave resi jak pise sniper, podle meho. Proste odesila cely text. Bud casove nebo pri kazdem zmacknuti klavesy.
0s prislytext = ""
1s poslu "Travicka zelena"
2s nic neprislo, zobrazim prislytext a ten je ""
3s prisel "preklad", prislytext = "preklad", zobrazim prislytext a ten je "preklad"
Jestli to chce posilat slovo po slove, muze, ale spravny translator preklada celou vetu po .!? Coz se da napsat, ze to posila po vetach. Kazdou vetu ulozit do pole a odeslat tolik ajax pozadavku, kolik je vet. To ale pak musis resit prave tim casovacem a kazdy preklad si hodit zvlast do casovace. A az skonci, doplni svou cast clanku. Mezitim by tam mohlo byt neco jako prekladam vetu. Pri kazde vete to vypise vsechny.

Mno, ale prijde mi to jako nesmysl. Ja bych sledoval pocet znaku a kdyz by prekrocil urcitou mez, tak bych preklad provadel bud na kliknuti tlacitka nebo pri 3s neaktivite to cele odeslal prekladaci.
Posilat to slovo od slova nebo vetu po vete znamena zatezovat server.

Ted uz si rozumime, proc a jak casovace?

Citovat příspěvek

 

Re: wait/delay/??

Autor: 3.14.TR

19:38:16 12.10.2011

to není tak snadné, ale mám takové podivné řeešení... schválně co mi na něj řeknete... ten nápad s callbackem nebyl uplně k ničemu..

[code]
/**
* Fetches descriptions
* @return void
*/
fetchDescriptions : function () {
this.isFetching=true;
$.get('?do=fetchDescriptions',
function (data) {
jQuery.descriptions.data = data['descriptions'];
jQuery.descriptions.isFetching = false;

while (fnc = jQuery.descriptions.describeFunctions.pop()){
fnc();
}


});
},


/**
* Translates key phrase of type type and prints it to the selector
* @param string
* @param string
* @param object/string
* @return void
*/
translate : function (type, key, selector){

if (this.isFetching || this.data == null){
this.describeFunctions.push(function(){
var trans = jQuery.descriptions.data[type][key];
if (typeof(trans) !== 'undefined' && trans !== 'undefined') {
$(selector).html(trans);
} else {
$(selector).html(key);
}
});

}
else{
var trans = jQuery.descriptions.data[type][key];
if (typeof(trans) !== 'undefined' && trans !== 'undefined') {
$(selector).html(trans);
} else {
$(selector).html(key);
}

}


},




[/code]

pokud nejsou ještě data k dispozici, uložim je do statického zásobníku a při callbacku ho vyprázním a provedu vše potřebné... neni to moc čisté, a navíc mi v jedné větvi nefunguje $(selector) (což nechápu, protože jinde to jde), ale celkově to překládá jak má...

rád uslyším nějakou kritiku, jinak díky za pomoc

Citovat příspěvek

 

Re: wait/delay/??

Autor: sniper

15:42:17 12.10.2011

neposilej kazdy slovo zvlast ale proste na server posli celej text a
vrat si ho celej prelozenej

Příspěvek zaslán emailem

Citovat příspěvek

 

Re: wait/delay/??

Autor: 3.14.TR

15:31:25 12.10.2011

ale přece nějak to jít musí... nebo jaké jsou řešení překladů? mám někde slovník a překládám, ale kde a jak ho držet, aby byl k dispozici hned, nebo jak na něj počkat?

Citovat příspěvek

 

Re: wait/delay/??

Autor: designerrr

9:25:46 12.10.2011

Peťo péťo, tohle jsem navrhoval hned v prvním příspěvku. Jenže znovu opakuji, jemu jde o to, aby funkce vrátila hodnotu, která nemusí být aktuálně přítomná. Jestli víš jak to vyřešít bez použití nekonečného cyklu či nastavení ajaxového požadavku jako synchronní, tak sem s tím. Jinak ajax nepoužívá žádné časové funkce pro navrácení hodnoty, ale prostě se v novém vlákně spustí požadavek na server a při jeho dokončení se zavolá příslušný callback, žádný časovač se tam nepoužívá.

Citovat příspěvek

 

Re: wait/delay/??

Autor: peta1

8:03:57 12.10.2011

Nemam slov? :)
Je videt, ze proste casovac nepouzivate, neovladate a pritom pouzivate ajax, ktery casove funkce pouziva prave k navraceni hodnoty. Zkuste zaklady assembleru.

Princip je takovy:
1.
prenoszahajen=true;
spustprenos();
2.
onclick = casovac = setInterval(obrazHodnotu(),1000)
Cili kazdych 1000ms se bude spoustet nejakou funkci. To je to hledane delay, ne?
3.
v zobrazHodnotu pak mas
if (!prenoszahajen) {casovac = null; alert(hodnota);}
Cili, pokud je nastavena promena prenoszahajen na false, tak se zobrazi hodnota.
Pro bykreslovani na obrazovku se pro casovac pouziva nejmensi hodnota asi 30ms, takze takovych 200ms si uzivatel ani nevsimne, ze tam je navic.

Citovat příspěvek

 

Re: wait/delay/??

Autor: 3.14.TR

15:41:23 11.10.2011

Jadro007
jo, to jsem si tak nějak udělal, ale jak udělejt to samotné zpoždění funkce? while(cekat){} zaseká prohlížeč. Obecně ale tak platí, že vracet hodnotu z listeneru (kdyby se mi nějaký povedlo napsat) není ulně jednoduché, dokud nemám kontrolu nad vlákny, což snad ani v js neni...

celkově se jedná o překladač, ten natáhne data z cookies, nebo php, a když jsou připravena překládá pomocí get() jednotlivé klíče. Dnes mě ještě napadlo, že bych mohl jako paramter předávat objekt který se má přepsat a prozatimně vypsat anglický ekvivalent.
Snad bude kód jasnější
[code]
div = $('

');
div.html(get('unit','militia',div)); //vrátí do divu angličtinu

-----

get: function (type, key, object) {
this.data.addFetchedLstener(function(e){ /*přidá nějaký lsitener, musím ještě dopsat, kdo ví jestli to půjde... tohle je funkce která se zavolá po fetchnutí dat.*/

var res;
/*podmínky...*/
if (jQuery.descriptions.data !== null && typeof(jQuery.descriptions.data[type][key]) !== 'undefined') {
res = jQuery.descriptions.data[type][key];
}
else {
res = key;
}

object.html(res); /*přepíšu div (po načtení dat)*/

});
return key; /*vrátim klíč, hned napoprvé*/
},
[/code]

pokud by to tkahle mohlo fungovat, a já byl schopný to napsat, fungovalo by to tak že nejdřív by se vše vypsalo anglicky, a po fetchnutí překladů by se vše přepsalo do češtiny... je to prasecký řešení, vim o tom, ale už jsem z toho zoufalej

'); div.html(get('unit','militia',div)); //vrátí do divu angličtinu ----- get: function (type, key, object) { this.data.addFetchedLstener(function(e){ /*přidá nějaký lsitener, musím ještě dopsat, kdo ví jestli to půjde... tohle je funkce která se zavolá po fetchnutí dat.*/ var res; /*podmínky...*/ if (jQuery.descriptions.data !== null && typeof(jQuery.descriptions.data[type][key]) !== 'undefined') { res = jQuery.descriptions.data[type][key]; } else { res = key; } object.html(res); /*přepíšu div (po načtení dat)*/ }); return key; /*vrátim klíč, hned napoprvé*/ }, [/code] pokud by to tkahle mohlo fungovat, a já byl schopný to napsat, fungovalo by to tak že nejdřív by se vše vypsalo anglicky, a po fetchnutí překladů by se vše přepsalo do češtiny... je to prasecký řešení, vim o tom, ale už jsem z toho zoufalej :-/

Citovat příspěvek

 

Re: wait/delay/??

Autor: Jadro007

12:21:37 11.10.2011

EDIT:
3) ... a proměnná "cekat" se nastaví na false

Citovat příspěvek

 

Re: wait/delay/??

Autor: Jadro007

12:18:04 11.10.2011

Napadlo mě to udělat takhle:
1) když se zavolá AJAX, tak se do proměnné třeba "cekat" nastaví true
2) do funkcí, které se musí zpožďovat, se přidá podmínka if(cekat == true), tak se přidá do globálního pole fronta
3) když doběhne AJAXový požadavek, tak se spustí funkce ve frontě

Je to jenom nápad, netestoval jsem to

Citovat příspěvek

 

Re: wait/delay/??

Autor: designerrr

12:05:17 11.10.2011

mg mě je to jasný, ale jemu jde o to, aby funkce vracela nějakou hodnotu, která v době volání té funkce nemusí být k dispozici, tak jak chceš pomocí nějakýho časovače v javascriptu pozastavit tělo funkce, aby se funkce nevrátila, dokud nedoběhne ajaxovej request? To prostě neuděláš, pokud tam natvrdo nevrazíš nějakej cyklus nebo nenastavíš ajaxovej request jako synchronní. Navíc listener není žádný časovač ale např. objekt, který implementuje nějaké rozhraní, např. MouseEventListener a tím pádem uzávírá s okolím dohodu, že může být zaregistrován na nějakém zdroji myších událostí. Není to žádný časovač, který si ověřuje nějaké podmínky. Prostě čeká, až je zavolán jeho handler na danou událost, stejně jako eventy v js. Takže časovač bych listenerem fakt nenazýval.

Citovat příspěvek

 

Re: wait/delay/??

Autor: peta1

7:45:33 11.10.2011

designerrr - A to jsem presne popsal. Cely ten while nahradis casovacem, ktery se spusti jednou za napsany interval, treba 1000ms. While se proti tomu spusti milionkrat za 1000ms.
Klidne casovac nazyvej listener nebo jinym nazvem. Listener je totiz tez casovac, ktery se uvnitr pta, if udalost=klik spust funkci kliknutimysi.

Nebo mas snad pocit, ze by tato animace zustala viset na while a nestihala?
http://peter-mlich.wz.cz/web/js/prjpw/animace_simple.html
http://axpsu.fpf.slu.cz/~web/x/sl3.htm

Citovat příspěvek

 

Re: wait/delay/??

Autor: designerrr

23:39:46 10.10.2011

Nevím jestli myslíme to samé, ale listenery v javě máš namysli implementování nějakého rozhraní, umožňující zaregistrování objektu jako handler na nějakou událost? To je pak ale stejně neco jiného, než chceš, ne?

Citovat příspěvek

 

Re: wait/delay/??

Autor: 3.14.TR

15:21:41 10.10.2011

[quote][bold]designerrr:[/bold][/quote]
přesně tak, mě jde o to, že zcela jinou funkcí zavolanou v libovolný okamžik chci vrátit data, která ještě nemusí, a zpravidla nejsou načtená. V tom případě chci, aby ta funkce počkala... V javě a podobných jazycích existují listenery, ale nejsem si jistý jestli ty co jsem našel v js vůbec budou tohle řešit...

Citovat příspěvek

 

Re: wait/delay/??

Autor: designerrr

10:34:43 10.10.2011

Jemu jde o to, aby mohl z funkce vracet data, která v době volání funkce ještě nemusí být nahraná a zároveň nechce používat
while(true)
{
if(data)
{
return data[x][y];
}
},
protože to zasekává hrozně prohlížeč.
Což prostě řešitelné v JS tím způsobem jak chce není.

Citovat příspěvek

 

Re: wait/delay/??

Autor: peta1

8:26:24 10.10.2011

setInterval, setTimeout jsou casovace.

Porad mi ale neni jasne, proc se ptas na neco, co resi dokumentace?
http://api.jquery.com/jQuery.get/
The success callback function is passed the returned data, which will be an XML root element, text string, JavaScript file, or JSON object, depending on the MIME type of the response. It is also passed the text status of the response.

Tez nechapu, proc se snazis prepisovat jquery a nezalozis si vlastni funkci.

A v podstate to tam mas, ze jo?
function (data) {
... /*ulož data*/
Proc si nenastavis nejakou js promennou, ze jsou nova data?
function (data) {
... /*ulož data*/
alert('prisla data')
alert('zpracovavam data 1')
if (jQuery.prisladata==true) // pro pripad, ze uz data jednou prisla a potrebujes to podchytit
{zkontroluj();}
jQuery.prisladata = true;
}

SetInterval('zkontroluj',5000); //spustis casovac, co se bude kazdych 5s opakovat a kontrolovat stav

function zkontroluj()
{
if (jQuery.prisladata) {alert('zpracovavam data 2'); jQuery.prisladata = false;}
}

Citovat příspěvek

 

Re: wait/delay/??

Autor: 3.14.TR

11:20:45 09.10.2011

[quote]udělat něco jako
while(true)
{
if(data)
{
return data[x][y];
}
} [/quote]
to jsem udělal, ale potřeboval bych tam nějaký zpožďovač, jinak to šíleně zaseká prohlížeč...

[quote]a to už bych tedy řekl, že by bylo lepší při vytváření ajaxového požadavku nastavit parametr async na false, tzn.
by se prohlížeč zablokoval, dokud by se data nenahrála, takže by se nevykonával ani jiný JS kod, [/quote]
to vzásadě neni možné, teoreticky může běžet několik různých fetchů najednou, nebo poběží jen jeden, a uživatel přece nebude čekat...

[quote]lze na něm zaregistrovat callbacky, které se mají vykonat např. při úspěšném dokončení požadavku, takže tím by se dalo v podstatě i obejít ten můj delayedExecution. [/quote]
callback mě nezachrání, protože já nechce vykonat něco po skončení ajaxu, ale kdykoli kdy si o to nějaký javascript řekne, a pokud nedoběhl fetch, tak jneom aby počkal... nějak to jí přece musí

Citovat příspěvek

 

Re: wait/delay/??

Autor: designerrr

11:02:18 09.10.2011

"zpožďuje totiž metodu, která ho zavolala."
Já myslel, že chceš, aby právě ta funkce vykonávající ten delay byla neblokující.
Pokud má ten get vracet nějakou hodnotu a zároveň je potřeba čekat na načtení těch dat, tak bys musel fakt natvrdo udělat něco jako
while(true)
{
if(data)
{
return data[x][y];
}
}

a to už bych tedy řekl, že by bylo lepší při vytváření ajaxového požadavku nastavit parametr async na false, tzn.
by se prohlížeč zablokoval, dokud by se data nenahrála, takže by se nevykonával ani jiný JS kod, ale tohle se myslim moc nedoporučuje.

Jinak se podívej taky na objekt deferred. Já jQuery moc neovládám, používám jiný framework, ale tyhle objekty většinou vrací např. volání funkce vykonávající ajaxový požadavek a lze na něm zaregistrovat callbacky, které se mají vykonat např. při úspěšném dokončení požadavku, takže tím by se dalo v podstatě i obejít ten můj delayedExecution.

Citovat příspěvek

 

Re: wait/delay/??

Autor: 3.14.TR

10:28:31 09.10.2011

pěkné, díky, ale není to uplně co bych potřeboval, potřebuju totiž aby mi to něco vracelo, konkrétně konkrétní políčko z data

[code]function get(x,y){
delayedExecution(
250,
function () { return data != null ? true : false;},
function () {
...
return data[x][y]
}
);
}

[/code]

jak předávat parametr? a jak ho dostat zpátky? delayedExecution sám o sobě vrací "undefned" ...

Citovat příspěvek

 

Re: wait/delay/??

Autor: designerrr

9:57:55 09.10.2011

delayedExecution(delay, condition, function)
{
var interval = setInterval(function () {
if(condition()) {
clearInterval(interval);
function();
}
}, delay);
}

// verze A
udelejNecoSDaty()
{
delayedExecution(250, function () { return data != null ? true : false;},
function () {
// vlastni telo funkce udelejNecoSDaty
}
}

// verze B
udelejNecoSDaty()
{
// vlastni telo funcke udelejNecoSDaty
}

udelejNecoSDatyWrapper()
{
delayedExecution(250, function () {return data != null ? true : false}, udelejNecoSDaty);
}

Citovat příspěvek

 

wait/delay/??

Autor: 3.14.TR

19:10:40 08.10.2011

zdravim,
mám takový problém a nevím jak ho vyřešit
v jednu chvíli začnu ajaxem fetchovat nějaká data ze serveru, a dokud ta data nejsou dotažená a uložená v nějaké proměnné, nemůžu s nimi logicky pracovat. Problém je, že z ostatních kusů kódu volám fce které ty data už využívají, takže bych potřeboval zajistit, aby tyto metody počkaly, než fetch doběhne.


[code]
jQuery.extend({
descriptions: {
data: null,

period : 250,

fetching : false,

fetchDescriptions: function () {
this.fetching = true;
$.get('?do=fetchDescriptions', function (data) {
... /*ulož data*/
jQuery.descriptions.fetching = false;
})
},

get: function (type, key) {
while (this.fetching){
this.wait(this.period);
}
return ...;


},

wait : function(time){
...?? /*co sem?*/

}

[/code]

našel jsem takový podivný postup, ale nedaří se mi ho přepsat a rozběhnout na mém příkladě, zpožďuje totiž metodu, která ho zavolala.
[url]http://docs.jquery.com/Cookbook/wait[/url] hned první záložka View source

pozn.: nekritizujte prosím to, že rozšiřuji jQuery, na odstranění se už pracuje, ale tuhle formu zápisu potřebuji, alespoň vzdáleně to připomíná oop

jak tedy naprogramovat správně fci wait??? delay mi prostě nejde, nebo na to jdu špatně? díky za odpovědi

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: