Problém s AJAXEM ve formuláři

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

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

Linkuješ do obou layoutů nette.ajax.js? Třeba máš špatně cestu nette.ajax.js v tom front-endovém layoutu.

gavec
Člen | 68
+
0
-

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

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

nette.init už nevolám vyměnil jsem ho za jiny (viz poslední příspevek) Každopádně vše vypadá OK, akorát se nepřekreslí snippet. Přičemž ve firebuggu v JSONU je správný kód s upraveným formem…

gavec
Člen | 68
+
0
-

Debugnul jsem ten ajax.js a vubec se nedostane do te metody success. Fakt je ale zvláštní, že na jiném místě to funguje bez problémů.
Ještě nějaké návrhy na řešení?

gavec
Člen | 68
+
0
-

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

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.