Volání více ajaxových dotazů na jeden klik s překreslením flash-zpráv

lookin
Člen | 2
+
0
-

Pěkný den všem,
jsem v nette nováček, ale myslím, že už jsem do něj celkem pronikl. Co mi ale stále zůstává trochu magií je Ajax, možná i proto, že JavaScript umím jen povrchně.

Mám už správně rozjetou ajaxifikaci odkazu, správně se mi po invalidaci zobrazí i nové flash zprávy. Ale teď mám komplikovanější úlohu se kterou si nevím rady:

Mám ve stránce tabulku, kde v každém řádku je obrázek nějakého uploadovaného scanu. Mám akci, které se předá id scanu a která ten scan zpracuje. To obecně u každého obrázku trvá poměrně dlouho, řádově do 20 s (na serveru je limit 30 s na vykonání php skriptu). Chtěl bych udělat odkaz, který by po odkliknutí postupně ajaxem volal onu akci na jednotlivé obrázky v řadě s tím, že by se v záhlaví stránky objevila vždy hned po dokončení akce nová flash-zpráva informující o dalším opraveném obrázku a zpracovaná data by se zobrazila v příslušném řádku.

momentálně mám JS funkci:

<script>
function processMultipleImages(href, from, to) {
   for(var i=from;i<to;i++) {
      $.nette.ajax({type: 'GET',url: href+"?data="+i});
   }
}
</script>

a v šabloně:
<a href="javascript:processMultipleImages('{plink Homepage:ajax}',1,10);" >Ajaxi trhej!</a>

Problém je, že tohle způsobí, že se data sice zpracují, ale do stránky se po hrozně dlouhé době vloží jen poslední flash zpráva (od posledního ajaxu) a opraví se jen poslední řádek tabulky…

Napadá mě, že problém bude v tom, že snippety se překreslí poprvé až po kompletním doběhnutí funkce processMultipleImages. Takže: dá se nějak volat ajax „blokujícím způsobem“ (aby se nepokračovalo dál, dokud nedoběhne?), resp. dá se nějak v JS vynutit okamžité překreslení snippetů?

A ještě mě napadá: jak vůbec jde zařídit, aby po vícenásobném klikání na ajaxovaný odkaz zůstaly ve stránce všechny flash zprávy, včetně těch, co už tam byly původně a jen se nově přidávaly ty z ajaxu pod už dříve přidané?

Moc díky za nápady a pardon za dlouhý text :-)

CZechBoY
Člen | 3608
+
+2
-

Potřebuješ v tom ajax callu říct že může běžet několik callů paralelně – k tomu slouží konfigurace multiple.
Dále potřebuješ flashky přidávat a ne překreslovat vždy jednu – k tomu slouží atribut data-ajax-append na snippetu s flash zprávami.

lookin
Člen | 2
+
0
-

Ááá, vřelé díky! To je přesně ono!
Takže jsem dal

<div n:snippet=„flashes“ data-ajax-append=„true“>
<div n:foreach=„$flashes as $flash“ n:class=„flash, $flash->type“>{$flash->message}</div>
</div>`

a do js:

$.nette.ajax({type: ‚GET‘,url: href+„&sid=“+i, off: [‚unique‘]});

a šlape to úplně podle představ…