Error 403 při ajax GET, špatná url?
- Mart78
- Člen | 31
Ahoj, mám problém s jednoduchým ajaxovým požadavkem, mám tabulku ve které řádky seřazuji pomocí jQuery UI Sortable, při změně pořadí chci nové pořadí uložit do databáze pomocí get požadavku. Po uložení chci zobrazit připravený textový element v šabloně.
V šabloně:
<small class="text-success" id="kategorie-status" style="display:none;">Změny byly uloženy.</small>
<table class="table table-condensed table-hover" id="kategorie" n:tag-if="count($categories)" n:inner-foreach="$categories as $category">
<tr id="cat-{$category->id}">
<td>{$category->Name}</td>
<td class="text-right">
<div class="kategorie-tlacitka" style="display:none;">
<a class="btn btn-default btn-xs handlekat" style="cursor: n-resize;">Přesunout</a>
<a n:href="Nabizime:upravitKategorii $category->id" class="btn btn-xs btn-default">Upravit</a>
<a n:href="Nabizime:smazatKategorii $category->id" class="btn btn-xs btn-default">Smazat</a>
</div>
</td>
</tr>
</table>
{block scripts}
{include parent}
<script src="https://code.jquery.com/ui/1.11.2/jquery-ui.min.js"></script>
<script src="{$basePath}/js/jquery.ui.touch-punch.min.js"></script>
<script src="{$basePath}/js/jquery.nette.js"></script>
<script>
$(function () {
$.nette.init();
});
$("#kategorie tbody").sortable({
axis: "y",
helper: fixHelper,
opacity: 0.8,
cursor: "n-resize",
handle: ".handlekat",
update: function( event, ui ){
var newOrder = $(this).sortable('serialize');
$.get('{link SaveOrder!}',newOrder,function(){
$("#kategorie-status").show().delay(3500).fadeOut(800);
});
}
}).disableSelection();
</script>
{/block}
V presenteru:
public function handleSaveOrder($order)
{
$i = 0;
foreach($order as $item){
$this->database->query('UPDATE nabizimekategorie SET Order=? WHERE id=?', $i, $item);
$i++;
}
}
Výsledek:
do databáze se změna neuloží, v chrome v konzoli:
GET http://localhost/kosmetika/%22/kosmetika/?do=SaveOrder%22&cat[]=1&cat[]=4&cat[]=3&cat[]=5&cat[]=6&cat[]=7&cat[]=8 403 (Forbidden)
jquery.js:9631
Zdá se mi že nesedí generovaná URL, ale možná je chyba jinde, mohl by mi někdo poradit prosím? Nevím kam sáhnout.
- David Matějka
- Moderator | 6445
{link SaveOrder!}
⇒ {link saveOrder!}
(male
„s“)
presto, ze v tovarnickach na komponenty a v signalech (createComponent…
nebo handle…) zacina nazev velkym pismenem, vsude jinde pouzivej male. At uz
v sablone {control saveOrder}
nebo pri sahani na komponentu
v presenteru $this['saveOrder']
nebo prave pri
vytvareni odkazu
a btw, na ulozeni url se hodi data-
atributy…
Editoval matej21 (17. 12. 2014 13:50)
- David Matějka
- Moderator | 6445
Ajo, zkus to dat bez apostrofu (jen {link...
), latte by to snad
melo escapovat spravne. Nebo zkus pouzit s apostrofama a noescape –
'{link ....|noescape}'
a nebo pouzij ty data atributy :)
- Mart78
- Člen | 31
půlku království tobě, URL už je správně, nicméně teď to
hlásí
GET http://localhost/kosmetika/?do=saveOrder&cat[]=1&cat[]=3&cat[]=4&cat[]=6&cat[]=7&cat[]=5&cat[]=8 500 (Internal Server Error)
Nějakej tip co s tímto? za druhou půlku království? :D :)
P.S: mohl bys popsat jak by mi pomohly data atributy na uložení url? Nechápu jak to myslíš
- David Matějka
- Moderator | 6445
otevri si tu url a tracy ti zobrazi, co je spatne – ted to muze byt cokoliv
k data atributum:
v html budes mit treba
<div id="kategorie" data-save-url="{link saveOrder!}">
js pak muzes dat do samotnyho souboru a jen si tu url vytahnes
$.get($("#kategorie").data("save-url"), ...)