Autor Zpráva
krteczek
Profil
Dobrý den, chci si udělat pomocí AJAXu změny v select nabídce. Snažím se postupovat podle knížky: AJAX: Vytváříme vysoce interaktivní webové aplikace, je tam příklad: Dynamické načítání seznamů.
A z něj vycházím při řešení mého požadavku, ale mám problém...

Mám select nabídku krajů, uživatel vybere kraj a do dalšího selectu se načtou města která jsou v tom kraji, (takhle by to mělo fungovat)
Zatím mi funguje jen toto:
1. Po výběru kraje se sestaví get dotaz ve tvaru: stranka.php?kraj=[id vybraného kraje]&cas=[časové razítko]
soubor je na: http://aj.jaknato.com/
2. dotaz se odešle, stranka.php provede ověření poslaného id a sestaví takový xml strom:

<mesta>
<mesto>
<mesto_id>3</mesto_id>
<mesto_nazev>Ostrava</mesto_nazev>
</mesto>
<mesto>
<mesto_id>4</mesto_id>
<mesto_nazev>Opava</mesto_nazev>
</mesto>
</mesta>

soubor je zde: http://aj.jaknato.com/vrat-seznam-mest.php?kraj=4
(ještě nevím co vrátit v případě, že kraj s tímto id neexistuje)
Původní servlet v javě z knihy jsem musel nahradit php skriptem (JAVU neumim)


3. Protože mi to nefunguje, rozházel jsem po javascriptu alerty a poslední který se mi vrátí je tento:
ve funkci aktualizujSeznamMest() => hned po var mesto = document.getElementById("mesto"); a vrací: object HTMLSelectElement, Ale alert následující hned po var vysledky = xmlHttp.responseXML.getElementByTagName("mesto");
se už neozve, přičemž má následující kód vygenerovat <option value="3">Ostrava</option><option value="4">Opava</option>

předpokládám že v tom mám nějakou chybu (to je jasné, jinak by to jelo), buď v xml které vracím (strom je v pořádku že by špatně navržene?) nebo v javascriptu který to má přegenerovat do html.

Mohli byste mě nakopnout tím správným směrem, aby mi z výše popsaného xml generoval <option value="2">brno</option> ?
krteczek
peta
Profil
krteczek
www.google.com a nasel bych si nejaky ajax chat
Vetsinou v tech knizkach to byva dost pekelne napsano.
"www.phpfreechat.net/" PHP+MySQL&nbsp;chat (JS Ajax)
"www.plasticshore.com/projects/chat/" PHP+MySQL&nbsp;chat (JS Ajax)
Ajaxove trideni v praxi maji na
http://portal.mpsv.cz/sz/obcane/vmjedno/vmobor
zmenis okres a zmeni se pocty inzeratu. Bohuzel, pak na to kliknes a maji tam nejakou chybu, tak uz neni oki.

Jinak, jak predpokladas, chyba je pred tim alert, co nereaguje.
JS konzola mi hlasi:
Chyba: xmlHttp.responseXML.getElementByTagName is not a function
Zdrojový soubor: http://aj.jaknato.com/ajax.js
Řádek: 68

function aktualizujSeznamMest()
var vysledky = xmlHttp.responseXML.getElementByTagName("mesto");
// tady melo byt asi ID ne? nebo by se to melo volat na document, ne?
peta
Profil
Jo, jestli chces, muzu ti udelat preklad od cestiny tve stranky (co mas odkaz pod formularem)
krteczek
Profil
peta: To všechno vím, ale nevím jak z toho, proto se ptám ;-)
PS: Překlad těch stránek nepotřebuji, nejsou totiž moje ;-)
krteczek
Profil
Bože ja sem asi slepý....
xmlHttp.responseXML.getElementByTagName //to co jsem tam měl
xmlHttp.responseXML.getElementsByTagName //správně:-)
jedno zapomenuté s.....aaaaaaaaaaaaaaaaaaaa
popojeli jsme :-)
krteczek
Profil
takže když upravím xml jen na jeden parametr u položky:
<mesta>
<mesto>nazev1</mesto>
<mesto>nazev2</mesto>
</mesta>
tak to začne fungovat, jenže já potřebuji předat do value id města. a to mi nejde. skoušel jsem přes:
document.write('<option value="' + vysledky[i][0] + '">' + vysledky[i][1] + '</option>'); ale to nejelo

<mesta>
<mesto>
<mesto_id>3</mesto_id>
<mesto_nazev>Ostrava</mesto_nazev>
</mesto>
<mesto>
<mesto_id>4</mesto_id>
<mesto_nazev>Opava</mesto_nazev>
</mesto>
</mesta>
peta
Profil
krteczek :)
"jenže já potřebuji předat do value id města. a to mi nejde"
To je siroky pojem, nejde. Co ti na to rici.

Ok, rekneme, ze mas vysledky. Co v tech vysledky mas?
var i,x; x="";
for (i in vysledky) {x+=i+"="+vysledky[i]+" ";}
alert(x);
Treba tam dojde ke konverzi 0="" nebo tam nemas spravne hodnoty.
(proto radeji pouzivam skryty iframe, kde si zobrazim zdroj a vidim, ale v podstate je to totez jako s tim alertem)
peta
Profil
Jeste jinak.
FF - plugin Development tools - view generated source vidim toto:
<label for="mesto">* Vyberte město: </label></td><td>

<select name="mesto" id="mesto"><option>
</option></select>

cili pravdepodobne
for(var i = 0; i < vysledky.length; i++)
--> vysledky[0][0] neexistuje
a hadal bych, ze mozna existuje
--> vysledky[0]['mesto_id']

lze zjistit:
for(var i = 0; i < vysledky.length; i++)
{ if (!Boolean(vysledky[i][0])) {alert("neexistuje vysledky["+i+"][0]")} }
krteczek
Profil
Takže jsem si s knížkou sedl na onu místnost a začetl jsem se... řešení jsem nalezl, už zpracovávám požadovaný xml tak jak potřebuji.
Jenže jsem zjistil že po odeslání formuláře je prázdná proměnná $_POST['kraj'], přičemž i v zobrazeném generovaném html jsou položky value vyplněné. Napadá Vás kde mám chybu? (odkaz: http://aj.jaknato.com/ )
krteczek
peta
Profil
1. Vyberu si kraj
2. Vyberu si mesto a JS konzola:
Chyba: getElelementById is not defined
Zdrojový soubor: http://aj.jaknato.com/
Řádek: 1
"getElementById"
3. Dam Odeslat
a kraj tam skutecne zadny neni

Ok, takze jinak. 1 , 2, zobrazit generovany kod
<select name="kraj" id="kraj" onchange="obnovSeznamMest();return;">
<option value="">Vyberte prosím kraj</option>
<option value="1">Pražský</option>
<option value="2">Brněnský</option>

<option value="3">Olomoucký</option>

<option value="4">Ostravský</option>
<option value="5">Královehradecký</option>
</select>
<select name="mesto" id="mesto" onchange="alert('-' + getElelementById('kraj'));"><option value="0">Vyberte město</option><option value="6">Olomouc</option></select>
... Cili to je vsechno v poradku.
ALE pozor, co to vidim? pred koncem formulare je:
<input type="hidden" name="kraj" value=""><input name="ok" value="odeslat" type="submit">
Takze vysledek byl spravny, kraj se ma = "".
Chybicka se vloudila :)
peta
Profil
Jeste by mne zajimalo, na vypsani toho pole mas nejakou funkci nebo print_r($pole) ? To je docela pekne, kdyz to ukazuje i typ promenne. Ja teda mam na formulari obvykle typ dat form/multipart, tak jsem zvedavej, co by to ukazovalo.
krteczek
Profil
hehe... to mi nedošlo že tam je ten zapomenuty input... tim padem to dava smysl... (zustal tam po puvodni verzi s dvema strankama, vyberem kraje na predchozí stránce, a zapoměl jsem na to :-/ no vzhledem k tomu že to trvalo několik dnu tak už se ničemu nedivím :Đ
Dík, provozní slepota je hnusná...
jo vypis je:
echo var_dump($_POST);-)
Toto téma je uzamčeno. Odpověď nelze zaslat.