AJAX bez použití snippetu

- necik11
 - Člen | 5
 
Dobrý den,
chtěl bych se zeptat jak je to s používáním AJAX „Bez“ použití snippetu… lze jednoduše vytvořit v JS soubru ajax, v presenteru vytvořit akci a to vše? Ptám se jelikož to „nějako“ nefugnuje. Vytvořil jsem si obyčejná ajax:
  $.ajax({
        datatype: 'json',
        url: 'dejMiNeco',
        method: 'GET',
        success: function (data) {
            console.log(data);
        }
    });
Následně vytvořil v presenetru akci:
public function actionDejMiNeco() {
        $this->sendResponse(new JsonResponse(['klic' => 'AAA']));
    }
a dostal objekt {redirect : adresa} …
Děkuji za případné rady!

- necik11
 - Člen | 5
 
Hm,
nějak nechápu… Jen přidat {plink URL}? Pokud ano dělá spadne to na chybě
„Uncaught SyntaxError: Unexpected identifier“, abych pravdu řekl moc nette
neumím. Přijde mi, že to v Presenteru nenajede cestu na tu akci a odešle se
že nic nenašel. Zkoušel jsem aji neznámou cestu a vypisuje to úplně to
samé… :/
Chci v projektu pouze volat GET a POST. Nejprve jsem chtěl rozchodit GET nějaká data … a nahrát si je do šablony přes jQuery, ale bohužel… Už si fakt nevím rady…
Editoval necik11 (27. 4. 2017 17:06)

- jahudka
 - Člen | 71
 
Makro {plink ...} ti vygeneruje URL podle nastavení tvého
routeru. plink bude narozdíl od link fungovat
i v komponentách, ale očekává plně kvalifikovaný název presenteru a
akce na kterou chceš odkazovat, takže {plink dejMiNeco} se asi
rozbije – mělo by tam bejt spíš
{plink NejakejPresenter:dejMiNeco}. Zároveň pozor na to, aby se
ti latte parser nechytal složených závorek které píšeš do JS kódu –
když třeba v inline javascriptu napíšeš var foo = {bar: 1};,
nejdřív se šablona parsuje latte kompilátorem, kterej pochopí
{bar jako latte macro a umře; bránit se tomu dá jednoduše tím,
že všechny složené závorky které potřebuješ zapsat v inline JS kódu
budou následované mezerou ({ bar: ...}). Ten syntax error co
posíláš nicméně vypadá že přišel spíš z JS, což znamená, že buď
ten js kód máš v externím souboru (kterej logicky nepřekládáš přes
latte), nebo máš vypnutou / přepnutou latte syntax. Pokud potřebuješ
předat do JS nějaký parametry (jako třeba tohle URL) a nemáš JS přímo
v šabloně, můžeš použít třeba data atributy.

- necik11
 - Člen | 5
 
No jsem lehce zmaten… Pokud tedy budu mít JS v latte šabloně smím používat {plink Presenter:akce}, ale pokud mam externi js, který volám takhle:
{block scripts}
{include parent}
<script src="{$basePath}/js/inRoom.js"></script>
{/block}
tak mám dát URL jako co? Není někde nějaká opravdová dokumentace :O ??! Děkuji moc za všechny Vaše rady!

- jiri.pudil
 - Nette Blogger | 1034
 
Jak napsal @jahudka, můžeš použít třeba data atributy. V Latte šabloně tu adresu přiřadíš do nějakého elementu:
<div id="foo" data-url="{plink dejMiNeco}"></div>
A v externím JS pak načteš:
var url = document.getElementById('foo').getAttribute('data-url');
				
- necik11
 - Člen | 5
 
Výsledek tohoto:
 $.ajax({
        datatype: 'json',
        url: "/Chat/www/room/dej-mi-neco",
        method: 'GET',
        success: function (data) {
            console.log(data);
        }
});
nebo když url, přiřadím přes JS udělá to furt to samé…:
Object {redirect: "http://localhost:280/Chat/www/?_fid=40on"}
	redirect:"http://localhost:280/Chat/www/?_fid=40on"
	__proto__:Object