AJAXový požadavek: server nezinvaliduje žádný snippet
- Honza Kuchař
- Člen | 1662
Ahoj,
kliknu na odkaz, pošle se AJAXový požadavek na server. Na serveru se
nezinvaliduje žádný snippet. → server vyrenderuje celou stránku. Myslím,
že by při jakémkoli AJAXovém požadavku měl server odeslat na klienta
očekávanou odpověd, tedy JSON. Tato chyba se vyskytuje už někdy od verze
0.9.1/2, nevím přesně. Ale vím, že to s nějakou verzí 0.9.x kdysi
nedělalo. Jako dočasný fix se dá použít tato oprava:
(v basepresenteru)
$this->invalidateComponent("nejakySnippetCoVubecNeexistuje");
Ukázka:
http://projekty.mujserver.net/…cument_root/ (live)
http://projekty.mujserver.net/…NetteBug.zip (zdrojáky:
upravené oproti skeletonu: @layout, Homepage/default,
HomepagePresenter, js/*)
Díky moc,
Honza Kuchař
Editoval honzakuchar (25. 4. 2010 16:13)
- phx
- Člen | 651
Tak jsem se pustil kapku do ladeni a MOZNA tusim kde je problem. Ale asi to je prace pro Davida, protoze nevim zda na neco nezapominam!
Cele to je v Presenter.php
V casi zda je pozadavek AJAX (radek okolo 200) se resi podminky:
- je vysledek Render AND (je nejaky snipped invalidovan NEBO existuje payLoad)
- neni Render odpoved AND je payLoad
ale neresei se zde kdyz neni ani jedno!!! To je ten problem.
Muzes na to Davide kouknout? Jako reseni se mi jevi z b) udelat jen else cast, ale opravdu mi chyby sirsi pohled. Urcite tam bude nejaky hacek:)
- Honza Kuchař
- Člen | 1662
Myslím, že je tak jak píšeš. Už jsem to taky jednou zkoumal a došel jsem na to samé místo. Tzn. cesta tudy nejspíš povede.
- David Grudl
- Nette Core | 8218
Je to „feature“. Pokud neřeknu, co se má kreslit (přes invalidateControl) nebo nepošlu něco do payload, tak se odešle celá stránka. Zabránit se tomu dá tím, že buď uložím nějaká data do payload nebo zavolám přímo sendPayload().