Autor Zpráva
pet4a
Profil
Dobrý den,
mohl by mi někdo pomoci s doplněním textu po kliknutí na "našeptávaní" z AJAXU?

var hledani = xmlhttp.responseText;
document.getElementById("vysledky").innerHTML = hledani;

V "našeptávačí" se mi pouze zobrazí výsledky vyhledávání ale nevím jak je posléze dostat to inputu.
Moc díky
Dan Charousek
Profil
Ideální by bylo nevracet v odpovědi jakýsi html snippet, který pak natvrdo vložíš do elementu #vysledky, ale vracet něco, s čím se dá lépe pracovat. Třeba JSON. Ten pak proiterovat a pro každý výsledek vytvořit obalový element, který bude mít onclick, při kterém se zapíše text do vyhledávacího inputu.
pet4a
Profil
Díky za radu, tak z AJAXU mi to bere snad ve formátu JSON
např.
[{"ID":"6","Jmeno":"Neil","Prijmeni":"Gaiman"}]

var rozdeleni =  JSON.parse(xmlhttp.responseText);
document.getElementById("vysledky").innerHTML = rozdeleni.Jmeno;


a v konzoli mi to vyhodí chybu
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data


AJAX
 $dataArray = array();

            while ($radek = $autor->fetch(PDO::FETCH_ASSOC)){
             $dataArray[] = $radek;
             //echo($radek['Prijmeni'].'*'.$radek['Jmeno'].'*'.$radek['ID'].'<br>');
            }
            echo json_encode($dataArray);
         }

Přikládám ještě obsah souboru ajax.php
         if(isset($_GET['hprijmeni'])){
           $hledani = $_GET['hprijmeni'];
           $hledany_dotaz = "SELECT * FROM Autor WHERE Prijmeni LIKE '%".$hledani."%'";
            
            $autor = $conn->prepare($hledany_dotaz);
            $autor ->execute();
            $dataArray = array();

            while ($radek = $autor->fetch(PDO::FETCH_ASSOC)){
             $dataArray[] = $radek;
             //echo($radek['Prijmeni'].'*'.$radek['Jmeno'].'*'.$radek['ID'].'<br>');
             
             //echo json_encode(array('Prijmeni'=>$radek['Prijmeni'],'Jmeno'=>$radek['Jmeno'],'ID'=>$radek['ID']));
            }
            
            echo json_encode($dataArray);
         }

Nevíte někdo kde mám chybu?
Dan Charousek
Profil
pet4a:
Co ti script vypíše, když soubor ajax.php spustíš ručně a ne přes ajax?

Jinak máš tam bezpečnostní díru:

           $hledani = $_GET['hprijmeni'];
           $hledany_dotaz = "SELECT * FROM Autor WHERE Prijmeni LIKE '%".$hledani."%'";

Oprav na:

$hledany_dotaz = "SELECT * FROM Autor WHERE Prijmeni LIKE '%?%'";
$autor = $conn->prepare($hledany_dotaz);
$autor->execute([$_GET['hprijmeni']];

Netestováno, ale myšlenka je snad jasná.
pet4a
Profil
Dan Charousek:
Díky za upozornění

když pustím samotný ajax.php s parametrem tak mi to vypíše

[{"ID":"6","Jmeno":"Neil","Prijmeni":"Gaiman"}]
Dan Charousek
Profil
Zvláštní: Živá ukázka
pet4a
Profil
Dan Charousek:
Děkuji za pomoc, tak nakonec to bylo tím, že jsem v tom souboru který jsem volal AJAXem neměl jenom čisté PHP :)
Ještě jednou moc díky za čas.

A ještě jeden rychlá rada? Je někde nějaký článek o způsobu psaní " a '?


Elementu chci přidat funkci s parametrem který je proměnná a nevím jak to do něj mám zanořit.
document.getElementById('vysledky').setAttribute("onclick","vybertext(TADY POTŘEBUJI VLOŽIT PROMĚNOU )" );
Keeehi
Profil
Základy syntaxe JavaScriptu - escape sekvence
juriad
Profil
Události se navěšují přímo a nikoli přes atribut:
document.getElementById('vysledky').onlick = function() {
  vybertext(TADY SI MŮŽEŠ DĚLAT CO CHCEŠ);
};
pet4a
Profil
juriad:
Tak už mi to funguje, moc děkuji :)

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: