Problém s AJAXEM ve formuláři
- gavec
- Člen | 68
Ahoj, prosim vás asi to bude jen nějaká blbost. Snažím se udělat jednoduchou ajax operaci ve formuláři, kde po vyplnění textového pole a následném submitu se provede něco provede. Už ale po načtení stránky mi firebug konzole vyhodí chybu „$.nette.init() is undefined“.
Co mi však nejde do hlavy je to, že to v adminu funguje, ale na frontendu to píše tenhle error. Jedná se o 2 různé layouty a js soubory mám všude stejné i ve stejném pořadí.
ajax.js
$(function () {
$.nette.init();
});
$("a.ajax").live("click", function (event) {
event.preventDefault();
$.get(this.href);
});
$("form.ajax").live("submit", function (event) {
event.preventDefault();
$(this).ajaxSubmit();
return false;
});
$("form.ajax :submit").live("click", function (event) {
event.preventDefault();
$(this).ajaxSubmit();
return false;
});
Jinak snippetem jsem obalil control formu. Vůbec mi to nejde do hlavy, tak když mi s tím nějaká dobrá duše poradí, byl bych velice rád.
- petr.pavel
- Člen | 535
Linkuješ do obou layoutů nette.ajax.js? Třeba máš špatně cestu nette.ajax.js v tom front-endovém layoutu.
- gavec
- Člen | 68
Cesty jsem měl správně. Už to funguje, sice ne podle představ, ale
funguje.
Do ajax.js jsem dal tento kod:
jQuery.ajaxSetup({
cache: false,
dataType: 'json',
success: function (payload) {
if (payload.snippets) {
for (var i in payload.snippets) {
$('#' + i).html(payload.snippets[i]);
}
}
}
});
// odesílání odkazů
$('a.ajax').live('click', function (event) {
event.preventDefault();
$.get(this.href);
});
// odesílání formulářů
$('form.ajax').live('submit', function (event) {
event.preventDefault();
$.post(this.action, $(this).serialize());
});
Pak ale nastal problém, že ajax při submitu nezná název tlačítka,
takže jsem ajax kod, dal ještě před ověření, kterým tlačítkem jsem
submitnul.
Neexistuje i způsob, kde by submit metoda znala nazav ajax submitu? Tím
myslím, aby mohl ověřovat např.
if($form[‚ajax‘]->isSubmitedBy(){…}?
Editoval gavec (9. 7. 2012 21:52)
- Vojtěch Dobeš
- Gold Partner | 1316
$.nette.init()
by všechna ta live volání vůbec neměl
potřebovat, naopak mohou být na škodu. Samotný skript automaticky podporuje
odesílání názvu tlačítka.
- gavec
- Člen | 68
Tak problém byl v tom, že se ve skriptu volal ještě jeden JS, se kterým
to kolidovalo. Mám ale ještě jeden problém. Snažím se použít tento
doplněk "":https://componette.org/search/?…
a vše funguje bez problému. Když ale kliknu na submit podruhé, už se ajax
neprovede – stránka se načte znovu.
Nesetkal se s tím prosím někdo?
- Vojtěch Dobeš
- Gold Partner | 1316
Předpokládám, že jsi použil oživovací kód ze stránky toho doplňku.
Ten je poměrně jednoduchý, a nebude aplikován na HTML kód vrácený ve
snipettech. Tudíž pokud si ve snippetu vrátíš formulář, ten už se znovu
ajaxem neodešle. nette.ajax.js
na to myslí a řeší to :). Pokud
chceš nadále používat tento doplněk, využij buď metodu
live()
, anebo si v něm zkus nějak zařídit, abys po
úspěšném dokončení požadavku znovu zavolal ten oživovací kód.