AJAX bez použití snippetu

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

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!

CZechBoY
Člen | 3608
+
0
-

jo, mělo by to v klidu jet. ty nejspíš narážíš na kanonizaci. použij radši generování odkazu pomocí nette.

$.ajax({
      datatype: 'json',
      url: {plink dejMiNeco},
      method: 'GET',
      success: function (data) {
          console.log(data);
      }
  });
necik11
Člen | 5
+
0
-

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
+
+1
-

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
+
0
-

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
+
0
-

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
+
0
-

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
CZechBoY
Člen | 3608
+
+1
-

Nemas tam autorizaci nahodou? Co kdyz na tu stranku prejdes bez ajaxu?

necik11
Člen | 5
+
0
-

Oh god, děkuji mockrát…Áno takže funguje vše, aspoň jsem si rozšířil vědomosti o plinku a všem :) Díky !