AJAX – prubeh zpracovani dat z formulare

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
lvq
Člen | 47
+
0
-

zdravim,
mam formular s doplnkem multipleuplouad, na server nahraju nekolik fotek, to probehne v poradku.
A po odeslani se zacnou fotky zpracovavat a ja chci dat uzivateli vedet, co se zrovna deje.
V sablone jsem si vytvoril snippet:

{snippet prubeh}
  {if (isset($aktualne_zpracovavana_fotka))}
    {$aktualne_zpracovavana_fotka}
  {/if}
{/snippet}

A funkce po odeslani formulare (zpracovavajici fotky) vypada zhruba takhle:

	public function odeslani_fotek($formular)
	{

...
		if ($formular['poslat']->isSubmittedBy())
    		{
   		   $hodnoty = $formular->values;
....
    		  foreach ($hodnoty['fotky'] AS $fotka)
     		 {
      			  $this->template->aktualne_zpracovavana_fotka = $fotka->name;
      			  $this->invalidateControl();

......
.....
                  }
              ...

Podle mych predstav by to melo pri zpracovani fotek vzdy vypsat, nazev fotky, ktera se zpracovava, to se ale vubec nedeje. Zpracuji se vsechny fotky zaraz. Na foru se me na toto tema nepodarilo nic najit.
Nevite jak by se tohoto chovani dalo docilit?
Predem diky za rady.
Pouzivam nette 2.0, verze stazena v unoru a PHP 5.2

arron
Člen | 464
+
0
-

Je potreba si uvedomit, ze komunikace po HTTP je v podstate jednosmerna, cili prohlizec posle dotaz a dostane se mu odpovedi. Takze pokud delas neco na serveru a prohlizec se Te na nic nepta, tak do nej zadna data nedostanes. Jestli jsem to spravne okoukal, tak se to dela tak, ze pomoci javascriptu se musis periodicky ptat serveru jaky je stav (treba jednou za 5 sekund, cas je potreba spravne vyladit) a vymyslet nejaky mechanismus, aby Ti server vracel nejaka rozumna data, jak daleko dana operace je. To se pak da pomici JS zobrazit.

Jan Jakeš
Člen | 177
+
0
-

Přesně tak. Stav operace můžeš uložit například do session, JavaScriptem vykresli nějaký spinner, ať je vidět, že se něco děje a periodicky posílej požadavky na handler, který přečte aktuální stav ze session a odpoví. Nebál bych se ptát i častěji, třeba každé 2s.