Jak správně vytvořit AJAX POST požadavek?

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

Dobrý den,

z nějakého důvodu se mi po kliknutí na <img> neprovede metoda handleDeletePic() v presenteru, která má smazat daný obrázek na serveru.

Použil jsem svůj starý funkční kód. Jaké věci ještě musím prosím přidat, aby to fungovalo správně?

Latte:

{block scripts}
    <script src="{$basePath}/js/jquery.js"></script>
    <script src="{$basePath}/js/netteForms.js"></script>
    <script src="{$basePath}/js/main.js"></script>
{/block}

<div class='btn_delete'>
<img class='thumb' src='{$basePath}/images/upload/{$page->dev_name}/{$pic}' alt='{$pic}' />
</div>

$(".btn_delete img").click(function(e) {
        e.preventDefault();

        var alt = $(this).attr("alt");

        $.ajax({
            type: 'POST',
            url: {link handleDeletePic!},
            data: { "img": alt },
            dataType: 'text',
            async: false,
            error: function(){
                alert("There's an error with AJAX.");
            }
        });

        location.reload();

        });

Presenter:

public function handleDeletePic() {
        $img = $this->context->httpRequest->getPost('img');
        $exploded = explode('/', $this->link('this'));
        $thispage = end($exploded);

        $img = WWW_DIR . "/images/upload/" . $thispage . "/" . $img;
        $this->template->img = $img;
        Nette\Diagnostics\Debugger::barDump($img);
        $session = $this->session->getSection("asdf");
        $session->img = $img;
        if(file_exists($img)) {
            unlink($img);
        }
    }

Editoval 2rec (24. 11. 2014 17:23)

Michal Vyšinský
Člen | 608
+
0
-

Řekl bych, že ti to při kliknutí v konzoli vyhazuje chybu, že JS nemůže nalézt funkci ‚handleDeletePic‘, že? Navazuješ event dvakrát a z toho jednou blbě a hnusně. Oddělej celý atribut ‚onclick‘.

2rec
Člen | 40
+
0
-

Zkoušel jsem to ještě přes metodu pomocí onclick, zapomněl jsem to smazat. Nicméně odstranil jsem onclick a pořád to nefunguje.

ODIS
Člen | 33
+
+1
-

Signály se zapisují bez „handle“, tedy místo „link handleDeletePic!“ by tam mělo být jen „link deletePic!“. Jinak bys v prezenteru musel mít metodu handleHandleDeletePic.

2rec
Člen | 40
+
0
-

Dekuju, to je ono!