Chrome OnChange(), load(), selector probléma.
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: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ü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:
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..
■ 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>';
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");
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..
Hibakeresés
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:
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.