Error 403 při ajax GET, špatná url?

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

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

{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)

Mart78
Člen | 31
+
0
-

nepomohlo :/ 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)
nechápu proč je v URL /kosmetika/%22/kosmetika/?do=… logicky by mělo být jen /kosmetika/?do=… ne?

David Matějka
Moderator | 6445
+
+1
-

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

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

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"), ...)
Mart78
Člen | 31
+
0
-

Díky díky, už funguju :)