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.