AJAX přenese hodnoty a zobrazí chybu Undefined index
- martyk
- Člen | 17
S Nette se pořád učím a teď jsem dospěl do fáze, že bych se potřeboval naučit AJAX.
V mém projektu mám takový zatím zkušební příklad, kde si zkouším toto:
default.latte:
<a class="ajax" n:href="dalsiMoznosti!"><div class="large-4 columns button">Další možnosti</div></a>
layout.latte:
<script>
$(function () {
$.nette.init();
});
$(function () {
$("a.ajax").on("click", function(){
$.nette.ajax({
type: 'POST',
url: {link dalsiMoznosti!},
data: {
'id' : 5,
'param' : 6,
},
error: function(){
alert("CHYBA");
}
});
});
});
</script>
a v presenteru:
public function handleDalsiMoznosti()
{
if ($this->isAjax())
{
$pom1 = $_POST["id"];
$pom2 = $_POST["param"];
$this->template->mensiMoznost = "x: ".$pom1." --- ".$pom2;
...
...
A vyskytl se mi problém, že po kliknutí se mi sice ve snippetu proměnná mensiMoznost vypíše, jak má, ale ihned poté se zobrazí chybová hláška, že není definováno id, co si přenáším Undefined index: id na řádku, kde naplňuji $pom1… Není mi to právě moc jasné, protože ty hodnoty se přenesou a dokonce vypíšou, ale ihned vyskočí tato hláška a zajímalo by mě, čím by to mohlo být. Snažím se to už chvilku hledat, ale nedaří se mi nic najít.
Děkuji za případné rady
Marty
- martyk
- Člen | 17
Když si tam dám kód pro upřesnění chyby, tak mi to napíše ten první případ a tedy že je to není připojeno…
error: function(jqXHR, exception){
var msg = '';
if (jqXHR.status === 0) {
msg = 'Not connect.\n Verify Network.';
} else if (jqXHR.status == 404) {
msg = 'Requested page not found. [404]';
} else if (jqXHR.status == 500) {
msg = 'Internal Server Error [500].';
} else if (exception === 'parsererror') {
msg = 'Requested JSON parse failed.';
} else if (exception === 'timeout') {
msg = 'Time out error.';
} else if (exception === 'abort') {
msg = 'Ajax request aborted.';
} else {
msg = 'Uncaught Error.\n' + jqXHR.responseText;
}
alert(msg);
}
- martyk
- Člen | 17
Já právě nevím, jak vyřešit to, abych tím ajaxem pokaždé poslal něco jiného. Totiž to, co budu postupně vypisovat do snippetů bude ovlivňovat to, co tím ajaxem mám v plánu přidávat v dalších kliknutích.
Já totiž s ajaxem nemám moc zkušeností, kdysi jsem to zkoušel jenom čistě bez nette, ale právě teď jsem se chtěl naučit ten postup v nette a tam jsem narazil na to, že jsem nikde nenašel, jak odesílat parametry, které se budou různě měnit až po načtení stránky.
Já jsem si právě myslel, že zápis např. <a class=„ajax“ n:href=„dalsiMoznosti! $param1, $param2“> je možné udělat jenom, když ty hodnoty parametrů jsou v těch proměnných po/při generování stránky.
A tak jsem to tam chtěl dostat tím mým řešením, kde bych potom do těch parametrů poslal výsledky nějakých javascriptových funkcí, které by projely tu stránku a poslaly tam správné údaje. No a nevěděl jsem, jak výsledky takových funkcí dostat do toho zápisu ve stylu <a class=„ajax“ n:href=„dalsiMoznosti! $param1, $param2“>. Je to nějak možné?
- F.Vesely
- Člen | 369
Pokud ty parametry pocitas az nejakym JS, tak je naprosto v poradku si
udelat vlastni volani ajaxu. Akorat tomu odkazu nedavej tridu ajax, jinak se ti
bude volat 2×. Pokud tam tridu ajax potrebujes mit, tak si tam pridej jeste
jednu tridu no-ajax
treba a pridej
$('a.no-ajax').netteAjaxOff();
, abys zrusil automaticke odesilani
ajaxu pres nette.ajax.js.
- martyk
- Člen | 17
A je možné to svoje řešení nějak navázat na ten zápis <a class=„mujajax“ n:href=„dalsiMoznosti!“> a na handle v presenteru nebo se to musí udělat celé mimo nette?
Já když to řeším v handleDalsiMoznosti(), tak se mi sice vypíše to, co má, ale pak se hned provede přesměrování na adresu mojeadresa/?do=dalsiMoznosti a obsah hlavního bloku stránky zmizí.
- jiri.pudil
- Nette Blogger | 1029
Když si ručně navěšuješ volání na odkaz, musíš se postarat, aby se nevykonala defaultní obsluha té události, tj. přechod na cílovou adresu:
$("a.ajax").on("click", function(e) {
e.preventDefault();
$.nette.ajax({});
});