Autor | Zpráva | ||
---|---|---|---|
Pavel_ Profil * |
#1 · Zasláno: 6. 5. 2013, 10:16:24
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 |
#2 · Zasláno: 6. 5. 2013, 11:24:41
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 * |
#3 · Zasláno: 6. 5. 2013, 11:31:00
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 |
#4 · Zasláno: 6. 5. 2013, 13:16:37
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 |
#5 · Zasláno: 6. 5. 2013, 14:47:39
Pavel:
Tobě pomohou 2 funkce. each a serialize / navštiv jQuery dokumentaci
|
||
Pavel_ Profil * |
#6 · Zasláno: 6. 5. 2013, 15:15:23
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. |
||
Časová prodleva: 11 let
|
0