Autor Zpráva
JardaR
Profil
Dotaz patří do této sekce z původního tématu, kde byl řešen odkaz, který na základě $row['id'] přesměruje do vedlejšího divu a dojde k zobrazení článku na základě daného id z odkazu.
echo "<li>\n" . '<a href="categories.php?catid='.$row['id'].'" onclick="clickCategory('.$row['id'].')">' . htmlspecialchars($row["nadpis"]) . '</a>';


Vytvořil jsem tedy soubor category_select.js
  var xmlhttp;
  function clickCategory(id) {
    xmlhttp=GetXmlHttpObject();
    if (xmlhttp==null) {
     return;
    }
    xmlhttp.onreadystatechange=stateChanged;
    xmlhttp.open('GET',"clanek.php?q="+id,true);
    xmlhttp.send(null);
  }

  function stateChanged() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
     document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }

  function GetXmlHttpObject() {
    if (window.XMLHttpRequest) { // pro IE7+, Firefox, Chrome, Opera, Safari
     return new XMLHttpRequest();
    }
    if (window.ActiveXObject) { // pro IE6, IE5
     return new ActiveXObject('Microsoft.XMLHTTP');
    }
    return null;
  }

Což jak jsem se dočetl, je nějaký standart nebo základ AJAXového zpracování.
Nemohu však přijít na to, jak tu předávanou proměnou v js zpracovat. Googlil jsem včera celý den, ale veškeré příklady mě nepomohli. Předávání např. value z inputu mě funguje bez potíží, ale na odkaz s proměnnou to nedokáži aplikovat a nic podobného jsem nedohledal.

Pro kontrolu zpracování mám vytvořen zkušební kód v clanek.php
<?php
include("config.php");
$q=$_GET["q"];
echo $q; break;
$sql="SELECT * FROM categories WHERE id = '".$q."'";
$result = mysql_query($sql);

echo "<table border='1'>
<tr>
<th>ID</th>
<th>Nadpis</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['id'] . "</td>";
  echo "<td>" . $row['nadpis'] . "</td>";
  echo "</tr>";
  }
echo "</table>";
?>

Ten např. pro value z inputů funguje, ale jinak bez reakce.
Děkuji
Chamurappi
Profil
Reaguji na JarduR:
onclick="clickCategory('.$row['id'].')"
Řetězce se píší do uvozovek/apostrofů.
JardaR
Profil
Chamurappi:
onclick="clickCategory('.$row['id'].')"
Celý onclick ještě do uvozovek? To jsem nikde neviděl, díky. Ale problém to neřeší.
Odkaz vypadá nyní
echo "<li>\n" . '<a href="categories.php?catid='.$row['id'].'" "onclick="clickCategory('.$row['id'].')"">' . htmlspecialchars($row["nadpis"]) . '</a>';

Zkoušel jsem i ten apostrof dole.
_es
Profil
JardaR:
Celý onclick ještě do uvozovek?
Chamurappi myslel reťazec v JS, predaný do funkcie clickCategory ako argument funkcie.
Mal by si sledovať aj to, aký HTML kód ti generuje PHP.
JardaR
Profil
_es:
Chamurappi myslel reťazec v JS, predaný do funkcie clickCategory ako argument funkcie.
No, a to je právě to, na co se ptám výše. Nemám absolutně tušení, jak to tam vložit či jak ten js má správně vypadat. Jak říkám, hledám už druhý den, ale podobný příklad jsem nenašel a tutoriály mi nepomohly.

Mal by si sledovať aj to, aký HTML kód ti generuje PHP.
Tak co generuje kód vím. Odkaz ze stromového menu (traverse - php.vrana.cz) vygeneruje např. http://localhost/obchod/spravce/categories.php?catid=1, ale co se děje po onclicku už nevím jak zjistit.
_es
Profil
JardaR:
ale co se děje po onclicku už nevím jak zjistit.
To zistíš v prehliadači, lebo to je JavaScript.
Ak dávaš dotaz do sekcie JS, mal by svoj dotaz spraviť tak, aby tam bol len HTML a JS kód, nie PHP kód generujúci HTML a JS kód.
JardaR
Profil
_es:
Ak dávaš dotaz do sekcie JS, mal by svoj dotaz spraviť tak, aby tam bol len HTML a JS kód, nie PHP kód generujúci HTML a JS kód.
Tak to se omlouvám, ale řeším jak má vypadat javascript, tak jsem to hodil sem.

JardaR:
myslel reťazec v JS, predaný do funkcie clickCategory ako argument funkcie.
To zistíš v prehliadači, lebo to je JavaScript.
No, neptal bych se, kdybych tohle věděl. Fakt jsem js začal upravovat poprvé včera, dost se naučil , ale tohle je mě neznámé a nikde to nemohu najít.

Zkusím najít jiné řešení bez js a ajaxu. Díky za snahu.
Chamurappi
Profil
Reaguji na JarduR:
Díky za snahu.
Dostal jsi správnou odpověď.

ale řeším jak má vypadat javascript, tak jsem to hodil sem
Jsi ve správné kategorii, ale pokládáš nevhodně otázku. Tady nás PHP kód opravdu nezajímá, podstatné je vygenerované HTML. Až se podíváš na vygenerované HTML a na ten skript v onclicku, vzpomeň si na příspěvek [#2].
_es
Profil
JardaR:
ale tohle je mě neznámé a nikde to nemohu najít.
Nevieš si snáď v prehliadači zistiť zdrojový kód stránky?
Teda, či to PHP správne vygenerovalo?
Aj atribút onclick je vlastne JS.
Ak tu dáš výsledný vygenerovaný HTML kód a popíšeš, čo to robiť má a nerobí, možno ti niekto poradí lepšie.
Alebo ešte lepšie živú ukážku.
JardaR
Profil
No stačí to napsat česky :-), vygenerovaný kód samozřejmě není problém a koukám do něj pravidelně:
...
<div class="categories_list">
<ul id="treemenu1" class="treeview"><li style="background-image: url(&quot;includes/images/open.gif&quot;);" class="submenu">
<a href="categories.php?catid=1" onclick="clickCategory(1)">Seznam1</a><ul style="display: block;" rel="open"><li class="submenu">
<a href="categories.php?catid=2" onclick="clickCategory(2)">Seznam2</a><ul rel="closed"><li>
<a href="categories.php?catid=3" onclick="clickCategory(3)">Seznam3</a></li><li style="background-image: url(&quot;includes/images/open.gif&quot;);" class="submenu">
<a href="categories.php?catid=4" onclick="clickCategory(4)">Seznam4</a><ul style="display: block;" rel="open"><li>
<a href="categories.php?catid=6" onclick="clickCategory(6)">Seznam5</a></li><li>
<a href="categories.php?catid=7" onclick="clickCategory(7)">Seznam6</a></li></ul></li></ul></li><li>
<a href="categories.php?catid=5" onclick="clickCategory(5)">Seznam7</a></li></ul></li></ul>
</div>
...

Nyní se podívám na první odpověď Chamurappiho a je mi to prd platné. :-)
Dělat to má následující viz. 1. dotaz: Kliknu např. na Seznam1 a url v js bude
clanek.php?q=1

Kliknu na Seznam2 a url v js ude
clanek.php?q=2
Chamurappi
Profil
Reaguji na JarduR:
Aha, ty máš v id číslo. To pak tedy uvozovky kolem argumentu nepotřebuješ.
Přiště rovnou popiš, s čím máš problém. Takhle si budu muset tipnout: vadí ti, že po kliknutí na odkaz návštěvník přejde na odkázanou adresu… takže se vůbec neptáš, jak stáhnout data AJAXem z adresy s parametrem (na přítomnosti parametru nezáleží, ne?), ale jak zabránit tomu, aby se odkaz prokliknul. Přidej do onclicku return false.

Jestli se ptáš ještě na něco jiného, tak to asi bez živé ukázky opravdu nepochopíme.
JardaR
Profil
Chamurappi:
Takhle si budu muset tipnout: vadí ti, že po kliknutí na odkaz návštěvník přejde na odkázanou adresu… takže se vůbec neptáš, jak stáhnout data AJAXem z adresy s parametrem (na přítomnosti parametru nezáleží, ne?), ale jak zabránit tomu, aby se odkaz prokliknul.
Co to je za nesmysl, psal jsem 2x přesný opak. Chci přejít na uvedenou adresu např. clanek.php?q=1 (také již uvedeno), jinak by ten kód ani neměl smysl a na parametru snad záleží, pro okrasu tam není. V souboru clanek.* viz. první dotaz tématu podle toho parametru pak vyvolám patřičné zobrazení DB dotazu.

Osobně si myslím, že problém je zde:
  var xmlhttp;
  function clickCategory(id) {
    xmlhttp=GetXmlHttpObject();
    if (xmlhttp==null) {
     return;
    }
    xmlhttp.onreadystatechange=stateChanged;
    xmlhttp.open('GET',"clanek.php?q="+id,true);
    xmlhttp.send(null);
  }

  function stateChanged() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
     document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }

  function GetXmlHttpObject() {
    if (window.XMLHttpRequest) { // pro IE7+, Firefox, Chrome, Opera, Safari
     return new XMLHttpRequest();
    }
    if (window.ActiveXObject) { // pro IE6, IE5
     return new ActiveXObject('Microsoft.XMLHTTP');
    }
    return null;
  }

Takže můj laický pohled je špatná úprava řádku 2 a 8.
Takové šílenosti jako
function clickCategory(onclick()) {

function clickCategory(<?php echo $row['id'];?>) {

a mnoho ostatních jsem zkoušel.
Chamurappi
Profil
Reaguji na JarduR:
můj laický pohled je špatná úprava řádku 2 a 8.
V nich chyba není.

Chci přejít na uvedenou adresu např. clanek.php?q=1 (také již uvedeno)
Chceš-li opravdu přejít na dotyčnou adresu a ne ji pouze načítat AJAXem, měl bys ji uvést v hrefu (a AJAX nepoužívat).

Když nejsi schopen či ochotet dodat živou ukázku, zkus alespoň popsat, jak se projevuje problém.
_es
Profil
JardaR:
Chci přejít na uvedenou adresu např. clanek.php?q=1 (také již uvedeno),
No ale v href máš categories.php?catid=1 takže prehliadač prejde na tú adresu, ak mu v tom nezabrániš, napríklad spôsobom, čo ti poradil Chamurappi.
JardaR
Profil
Přejde na dotyčnou adresu nebo načíst ajaxem. Trochu se ztrácíme ve slovíčkaření. Samozejmě ji nehodím do href, protože potřebuji ajax. Hned v první větě tématu jsem psal, že potřebuji zobrazení do vedlejšího divu, tzn, ajaxem bez refreshe stránky.
Tzn. vlevo div se stromovým menu, generovaným takto:
...
<div class="categories_list">
<ul id="treemenu1" class="treeview"><li style="background-image: url(&quot;includes/images/open.gif&quot;);" class="submenu">
<a href="categories.php?catid=1" onclick="clickCategory(1);return false;">Seznam1</a><ul style="display: block;" rel="open"><li class="submenu">
<a href="categories.php?catid=2" onclick="clickCategory(2);return false;">Seznam2</a><ul rel="closed"><li>
<a href="categories.php?catid=3" onclick="clickCategory(3);return false;">Seznam3</a></li><li style="background-image: url(&quot;includes/images/open.gif&quot;);" class="submenu">
<a href="categories.php?catid=4" onclick="clickCategory(4);return false;">Seznam4</a><ul style="display: block;" rel="open"><li>
<a href="categories.php?catid=6" onclick="clickCategory(6);return false;">Seznam5</a></li><li>
<a href="categories.php?catid=7" onclick="clickCategory(7);return false;">Seznam6</a></li></ul></li></ul></li><li>
<a href="categories.php?catid=5" onclick="clickCategory(5);return false;">Seznam7</a></li></ul></li></ul>
</div>
...

a v pravém divu se po kliknutí na libovolný odkaz zobrazí seznam článků (proto AJAX), podle toho jakou adresu (nebo jak to nazvat) ajax poskytne zpět, např.
clanek.php?q=1

Tu 1 já si přes $_get v clanek.php přečtu a podle toho provedu akci co v pravém divu bude.

Sorry, ale líp už fakt nevím jak to napsat.
_es
Profil
JardaR:
No a s tým upraveným kódom ti to stále nefunguje, alebo v čom je ešte problém?
JardaR
Profil
No nefunguje, při kliku na kategorii se nic nestane.
_es
Profil
JardaR:
No nefunguje
No ale to môže mať 1 000 dôvodov. Keby si dal tú „žívú ukážku“, tak by si to už mohol mať vyriešené.
"Nefunguje" vo všetkých prehliadačoch?
Má ten „pravý div“ id=txtHint?
Zobrazí sa v chybovej konzole prehliadača nejaká chyba JS?
PHP skript clanek.php funguje správne?
…?
JardaR
Profil
_es:
Má ten ‚pravý div‘ id=txtHint?
BINGO !!!! Zrovna jsem na to přišel taky. Vůbec jsem nevěděl, že to značí id divu a to byl ten kámen úrazu. Škoda, že jsem to nikde nenašel vysvětleno. Až tento vzor www.w3schools.com mě díky postupným úpravám pomohl.
_es - díky moc za potvrzení chyby.
_es
Profil
JardaR:
Vůbec jsem nevěděl, že to značí id divu a to byl ten kámen úrazu
Názov metódy getElementById sa mi zdá ako dosť popisný názov pre metódu.
Inak majú tunajšie kódy v príspevkoch tú dobrú vlastnosť, že sú v nich odkazy na rôzne dokumentácie, je tam odkaz aj pre túto metódu.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0