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
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
Ř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‘.