Volání více ajaxových dotazů na jeden klik s překreslením flash-zpráv
- lookin
- Člen | 2
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 :-)
- lookin
- Člen | 2
Ááá, 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…