ugrás a tartalomhoz

Chrome OnChange(), load(), selector probléma.

Incomingson · 2014. Jan. 16. (Cs), 21.34
Kedves weblabor.hu-a tagok.

Nem fordulnék hozzátok ha nem kínlódtam volna a témával vagy több ízben.

Megpróbálom felvázolni a lehető legegyszerűbben az esetet. Ez egy játék itemlistáját tartalmazza, egy bolt menü ahol vásárolni lehet kategóriákra lebontva.

Első probálkozás:

Vagy egy fő php-m. Nevezzük el: index.php.
Ebben az index.php ban tartózkodik a következő kód:

echo '<select class="urlap_selectors" id="boltiaru" name="boltiaru" onChange="$(\'#targyak_\').load(\'bolt/admin_bolt_item.php?boltiaru=\'+this.value)">
<option value="">- Válassz -</option>';
$kategoria =  mysql_query('SELECT * FROM targyak_kategoriak');
while($kat=s($kategoria)){		
	echo '<option value="'.$kat['id'].'">'.$kat['kategoria_neve'].'</option>';
		
}
echo '</select>';
echo '<div id="targyak_"></div>';


Amint látható egy a kódsor a selector onChange fügvény segítségével load() ol egy php fájlt a targyak_ divbe! Ez sikeresen meg is történik. Ekkor létrejön egy $_GET['boltiaru'] az admin_bolt_item.php ben.( Majd egy hozzáad gomb segítségével az index.php elküldi egy ajaxal a szervernek mit rakjon be az adatázisba.)

A listázás megtörténik.

admin_bolt_item.php tartalma:

$k_t_kategoria =  mysql_query('SELECT * FROM targyak WHERE kategoria="'.$_GET['boltiaru'].'"');
	while($ktka=s($k_t_kategoria)){
item adatai.....
<input type="submit" value="Hozzáad" class="urlap_gomb" onClick="prog();">
		
	}
	
echo '<script>
function prog() {
$(\'#targyak_\').load(\'bolt/admin_bolt_item.php?boltiaru=\'+'.$_GET['boltiaru'].');
}
</script>';

Küldéskor az index.php ban lévő divbe (targyak_) betölti az admin_bolt_item.php fájl önmagát és átadja a $_GET ben lévő értéket hogy a kategóriakiválasztás megmaradjon!


Van egy ellenőrzés is a PHP ban, hogy a hozzáadott itemek ne jelenlenek meg!
A gond itt keletkezik: Mivel újratölti magát, ezért a load(); miatt a friss eredményeket kellene megjelenítenie. Na most a Chrome nevezetű álnok böngésző egyszer lefuttatja, egyszer nem.

Általában megoldja problémát sok helyzetben a következő kód:
header("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");

Most sajnos nem ez a helyzet.

Második próbálkozás:
Sok órányi keresés után gondoltam megpróbálom hide(); az itemeket egyesével.
Ez esetben a while on belül beletettem mindegyik kiiratást egy divbe, majd az id jük megkapta a whileban következő id azonosítót.
A getElementByID segítségével megkíséreltem kiválasztani az adott elküldött div id jét, azonban ez nem sikerült.

A leges legjobb az lenne, hogy ha a get et nem a divnek adnám át , hanem újraküldetném a selectorral a kiválasztott értéket!


Eltudom képzelni akár azt is, hogy jelen esetben a selector kapja meg és küldi újra, így tuti befrissít! Azonban nem vagyok tisztában ennek pontos szintaktikájával..
 
1

Hibakeresés

Hidvégi Gábor · 2014. Jan. 17. (P), 10.57
Ajánlom figyelmedbe az Egyszerű hibakeresés című cikket. Chrome esetében mindig kimegy a kérés? Mindig van válasz? A válaszban mindig benne vannak a kiírandó adatok?
2

Minden adat megvan

Incomingson · 2014. Jan. 18. (Szo), 18.08
Minden adat megvan.

print_r($_POST);
print_r($_GET);



Ennyire nem vagyok béna:)

Chrome esetében mindig kimegy a kérés? - IGEN
Mindig van válasz? - IGEN
A válaszban mindig benne vannak a kiírandó adatok? - IGEN

Egyébként meg a chrome elég bénán cachel. A gondot megoldotta:

echo '<script>
function prog() {
setTimeout("$(\'#targyak_\').load(\'bolt/admin_bolt_item.php?boltiaru=\'+'.$_GET['boltiaru'].')", 100);
};
</script>';


Kellett neki egy kis noszogatás...azért köszönöm, remélem aki ere téved és hasonló gondja van látja, hogy időzíteni kellett.