AJAX - problem s tvorbou HttpRequest – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

AJAX - problem s tvorbou HttpRequest – JavaScript, AJAX, jQuery – Fórum – Programujte.comAJAX - problem s tvorbou HttpRequest – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 

19. 9. 2009   #1
-
0
-

Dobrý den,

předem se omlouvám za špatné zařazení mého příspěvku, ale jelikož je v češtině zkryto pod zkratkou AJAX Asynchornní JavaScript a XML, tak jsem si ho netroufl dát jinam než pod samotný JavaScript.

Zasekl jsem se na jednom problému. Tahám data z databáze. U každého prvku pak mohu rozkliknout na více informací. To mi právě zajišťuje AJAX. Informace se vždy rozkliknou, ale nesprávné. Lepší je vše ukázat na příkladu:


Nejprve napojím stránku na databázi, tento kód přeskočme.

Poté začnu pracovat s požadovanou tabulkou, přes cykl vypíši všechny řádky. Pokud chce uživatel více informací o dané kočce, zmáčkne na tlačítko "Více informací" a přitom se přes OnClick zavolá na ZobrazDetaily.



$select = "SELECT * FROM kocky;";

if(($data = mysql_query($select, $this->link)) == 0)
{
self::error_msg('Chyba v dotazu.');
return 0;
}

print '<div class="menu_nadpis">Složení základny</div><div id="divZobraz">';

while($row = mysql_fetch_array($data))
{

<table>
<tr>
<th>Jméno</th><td>'.$row['jmeno'].'</td>
</tr>
<tr>
<th>Věk</th><td>'.$row['vek'].'</td>
</tr>
<tr>
<td colspan=2>
<input type="button" value="Více informací" onclick="ZobrazDetaily(this.value)";>
</td>
</tr>
</table>

}
print '</div>';
}


Tak a teď jdu na AJAX. Funkce ZobrazDetaily apod. Rozhodl jsem se používat formu GET, výsledek ( zmiňovaných víc informací pro uživatele o kočce ) se bude načítat z popis_kocky.php a to v divu "divZobraz, který už mimo jiné jsme zakomponovali do předchozího kódu. V souboru popis_kocky se nachazi jen jeji popis, zas nema cenu zobrazovat.



<script language = "javascript">

var xHttp = false;

if (window.ActiveXObject)
{xHttp = new ActiveXObject("Microsoft.XMLHTTP");}
else if (window.XMLHttpRequest)
{xHttp = new XMLHttpRequest();}

function ZobrazDetaily()
{
xHttp.onreadystatechange=ZmenaStavu;
xHttp.open("GET","popis_kocky.php",true);
xHttp.send(null);
}

function ZmenaStavu()
{
if (xHttp.readyState==4 && xHttp.status == 200)
{document.getElementById("divZobraz").innerHTML=xHttp.responseText;}
}
</script>


V čem je problém? Všem zkušeným, pokud jsem to napsal aspoň trochu srozumitelně, již došlo, že to tak nemůže být. Za předpokladu, že je v databázi jeden řádek ( jedna kočka ), tak je vše ok. Ovšem když jsou tam dvě a více, už problém nastává a to v tom, že když si řeknu o informace o druhé kočce, naskočí mi informace o první. To samé se stane, když si řeknu o informace o desáté kočce, ano, naskočí ji informace o kočce první.

Buď se musí ke každému řádku z databáze deklarovat samostatný HttpRequest.
Buď se musí volání z OnClicku více specifikovat.
a nebo je to složitější a mé snažení je na ... .

Předem děkuji za Vaše názory.

Nahlásit jako SPAM
IP: 90.180.184.–
marioff0
Expert
20. 9. 2009   #2
-
0
-

ved vobec neposielas udaj do js spracovania o ktoru kočku sa jedná... :) teda premennu s ideckom danej kočky... jasne ze ti potom vzdy zobrazi prvu v DB....

pri vypise pridaj do
1.onclicku dalsiu premennu a to idecko... napr. (za predpokladu ze mas v db stlpec ID s autoincrementom)

onclick="ZobrazDetaily("'.$row['id'].'");"


2.nazov idecka musi byt vzdy iny ked je tam viac kočiek cize jedinecny... teda pridame id k nazvu... naj riesenie:

<div id=\"divZobraz'.$row['id'].'\" ...... >

v javascripte pridas do volania suboru premennu ktoru si si poslal vyssie vo funkcii ZobrazDetaily.. a zaroven tu premennu vlozis do nazvu id v ktorom zobrazime vysledok

  function ZobrazDetaily(ktora) 

{
xHttp.onreadystatechange=ZmenaStavu(ktora);
xHttp.open("GET","popis_kocky.php?id="+ktora,true);
xHttp.send(null);
}

function ZmenaStavu(ktora)
{
if (xHttp.readyState==4 && xHttp.status == 200)
{document.getElementById("divZobraz"+ktora).innerHTML=xHttp.responseText;}
}


vo phpecku len zmenis SELECT do databazy:

$select = "SELECT * FROM kocky WHERE id='".$_GET['id']."';";



prosim dakoho kto je lepsi v JS ako ja, nech to pripadne opravi... ak to nepojde... lebo neviem ako preniest z funkcie ZobrazDetaily premennu ktora do funkcie ZmenaStavu..... momentalne z hlavy... jedine tak ako som to napisal..

hadam som ti pomohol... zaroven ti odporucam trochu viac rozmyslat..... uz vies preco...

Nahlásit jako SPAM
IP: 195.78.44.–
Škoda, že život sa nedá "sejvovať", tak že by som po zlom životnom rozhodnutí mohol začať odznova :([br] Lenivosť je matka pokroku.[br][br] http://cut.sk/ - odstrihni si dlhý link
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 27 hostů

Podobná vlákna

HttpRequest v Xampp — založil Row

AJAX - problém — založil hal_sk

Problem s ajax-om — založil leopik1

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý