Autor Zpráva
Pavel_
Profil *
Ahoj, hraju si s AJAXem, konkrétně odeslání dat metodou post. Narazil jsem na problém, který nevím, jak vyřešit. Popis by byl komplikovaný, ukážu na příkladu.

$(document).ready(function() {
    $('.submit').click(function() {

        var form = $(this).closest('form');
        var form_id = form.attr('name');

        var ajax_par_0 = form_id + 'id';
        var ajax_par_1 = form_id + 'p_id';
        var ajax_par_2 = form_id + 'c_ret';
        var ajax_par_3 = form_id + 'c_q';
        var ajax_par_4 = form_id + 'c_s';

        $.post('../script.php', {
            ajax_par_0: form.children('input[name="' + ajax_par_0 + '"]').val(),
            ajax_par_1: form.children('input[name="' + ajax_par_1 + '"]').val(),
            ajax_par_2: form.children('input[name="' + ajax_par_2 + '"]').val(),
            ajax_par_3: form.children('input[name="' + ajax_par_3 + '"]').val(),
            ajax_par_4: form.children('input[name="' + ajax_par_4 + '"]').val()
        }, function(out) {

        });

        return false;
    });
});

Na stránce je několik formulářů, každý má své ID a jednotlivé inputy mají název ve tvaru "(int)id(string)nazev", tedy:
1id, 1p_id, ... v prvním formuláři
2id, 2p_id, ... ve druhém formuláři
4id, 4p_id, ... ve čtvrtém formuláři

Problém je ten, že na řádkách 14-18 nemůže být před dvojtečkou proměnná, nevím tedy, jak tam dostat proměnlivé ID formuláře.


Druhý dotaz s tím spojený je ten, že na ř. 7-11 musím definovat jestlivé proměnné samostatně do proměnných. Bylo by možné tam pracovat s polem a v postu pole projít a jednotlivé proměnné nějak naplnit?

Pole bylo ve formátu new Array ('id', 'p_id', 'c_ret', 'c_q', 'c_s'); a na ř. 14 pak for cyklus. Ale toto se mi zrealizovat nepodařilo, pravděpodobně kvůli problému uvedenému výše.

Nějaké řešení, nápad, návrh?
Chamurappi
Profil
Reaguji na Pavla:
var form = $(this).closest('form');
Proč tak složitě? Jestli je onclick na odesílacím tlačítku, je formulář v this.form.
Vyhledávání <input>ů přes selektor je také docela neefektivní.

Problém je ten, že na řádkách 14-18 nemůže být před dvojtečkou proměnná
Stačí se naučit základy JavaScriptu. Ke členům objektu se dá dostat buď zápisem objekt.člen, nebo objekt["člen"]. Zápis v {chlupatých závorkách} je zápis objektu.

Bylo by možné tam pracovat s polem a v postu pole projít a jednotlivé proměnné nějak naplnit?
Ano. Pole se dnes zapisuje spíš takhle: ['id', 'p_id', 'c_ret', 'c_q', 'c_s'] … od vyhynutí trojkového Netscapu už zápis s new Array není potřeba.
Pavel_
Profil *
Chamurappi:
"Vyhledávání <input>ů přes selektor je také docela neefektivní."
je jiné řešení jak je hledat?

"Stačí se naučit základy JavaScriptu. Ke členům objektu se dá dostat buď zápisem objekt.člen, nebo objekt["člen"]. Zápis v {chlupatých závorkách} je zápis objektu."
Tomuhle moc neorzumím, co jsi tím chtěl říct. Na 14. řádku je ajax_par_0: ... a konzole mi hlásí chybu na místě, kde je proměnná ajax_par_0. Zkoušel jsem více variant, ale nic než string mi to tam vzít nechtělo.

Nebude problém (rozdíl mezi mou myšlenkou a tvým návrhem řešení) v tom, že ty znáš "člen", tedy name prvku? Já ho neznám, resp. znám za pomoci nějaké proměnné id - id + 'id', id + ''p_id', ...

"Ano. Pole se dnes zapisuje spíš takhle"
jak se zapisuje pole, to vím. Ale nevím, jak z pole naplnit ten blok. Asi proto, že při průchodu cyklem budu mít hodnoty v proměnné a proměnná mi hlásí v konzoli chybu.
Chamurappi
Profil
Reaguji na Pavla:
je jiné řešení jak je hledat?
Máš-li v proměnné form formulář, tak ve form.pterodaktyl je <input name="pterodaktyl">. Dále také je ve form.elements kolekce všech formulářových prvků, takže jí jde projet cyklem, aniž bys znal jména.

Tomuhle moc neorzumím, co jsi tím chtěl říct.
Na řádcích 13 až 19 máš zápis objektu, začíná { a končí }. Tento objekt můžeš mít v proměnné a můžeš ho libovolně upravovat dalšími příkazy.
var data = {};
data.pterodaktyl = form.pterodaktyl.value;

Nebude problém (rozdíl mezi mou myšlenkou a tvým návrhem řešení) v tom, že ty znáš "člen", tedy name prvku?
V zápisu objekt["člen"] je člen zapsaný jako řetězec, můžeš si ho poskládat z libovolných jiných řetězců… data["ptero" + "daktyl"] = form["ptero" + "daktyl"].value.
Kcko
Profil
Pavel:
Tobě pomohou 2 funkce.

each a serialize / navštiv jQuery dokumentaci
Pavel_
Profil *
Chamurappi:
děkuji za podrobnější vysvětlení, přesně to jsem potřeboval. Nyní už je mi jasné, co jsi myslel tím minulým příspěvkem. A už vím, jak pracovat s tím, co mám k dispozici. Díky.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: