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 | 1029
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