Cześć,
Myślałem, że pójdzie łatwo a tutaj niestety z wielkim problemem się spotkałem, do rzeczy:
try { $string = $_POST['string']; $database = new PDO('mysql:host=localhost;dbname=x', 'x', 'xi'); $database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $database->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $query = $database->query("SELECT imie, nazwisko, klasa FROM uczniowie WHERE imie LIKE '%$string%'"); while($s = $query-> fetch()) { http://www.php.net/echo json_encode($s['imie']); } } catch(Exception $e) { //chwilowo niepotrzebne }
$(function() { $('input').on('input', function() { var value = $(this).val(); $.ajax({ type: 'post', url: 'search.php', dataType: 'json', data: { string: value }, success: function(data) { $('#result').html(data); }, error: function() { alert('blad'); } }); }); });
Jaki błąd?
Nie możesz przenieść iteracji z php do js?
Zwracasz wtedy cały wynik i iterujesz po nim po stronie klienta.
No niby tak czyli muszę w PHP zwrócić całą tablicę z wszystkimi rekordami i dopiero w js to rozpakować na dane? Ale w takim razie jak w formacie JSON sobie to wyiterowac?
Lekturka:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
Ok rozumiem, tylko że powyższe opcje u mnie się nie nadadzą raczej. Pewnie muszę dane w JSON zamienić na tablicę a potem to wyiteruję
W php masz zwrócić kompletną tablicę zakodowaną w JSON, a w JS sobie na niej pracować.
W tej chwili odbierasz dane w niepoprawnym formacie, bo są to kolejno zakodowane tablice które po złączeniu nie są poprawne.
czyli tak?
try { $string = $_POST['string']; $database = new PDO('mysql:host=localhost;dbname=x', 'x', 'xi'); $database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $database->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $query = $database->query("SELECT imie, nazwisko, klasa FROM uczniowie WHERE imie LIKE '%$string%'"); $result = $query->fetchAll(); } catch(Exception $e) { //chwilowo niepotrzebne }
Wypluj json_encode($result)
a w JS w success ajaxa $.parseJSON i iterujesz w JS
Tak tylko że PHP ewidentnie mi nie zwraca w formacie JSON (w konsoli wywala błąd "SyntaxError: JSON.parse: unexpected end of data..."), dumpując w PHP tablicę otrzymuję:
string(104) "[{"imie":"Patryk","nazwisko":"Szybki","klasa":"1LI"},{"imie":"Patrycja","nazwisko":"Lama","klasa":"1Z"}]"
Jak wypluwasz JSONa?
$result = $query->fetchAll(); http://www.php.net/die(json_encode($result));
json jest poprawny, w takim razie Twój JS leży
Jakieś sugestie? Skrypt w js jest taki jak w pierwszym poście, nic innego. Próbowałem wywalić wszystko i zostawić talko $.parseJSON ale błąd jest ciągle i coś z tymi danym musi być nie tak
// tak w istocie to po tutaj używać $.parseJSON? Skoro do tablicy to wszystko wywalić to ta funkcja będzie odpowiednia?
Próbując doszedłem, że można to zrobić po prostu tak:
var data = [ { "imie": "Patryk", "nazwisko": "Szybki", "klasa": "1LI" }, { "imie": "Patrycja", "nazwisko": "Lama", "klasa": "1Z" } ] for(var i=0;i<=a.length;i++) { alert(a[i].imie); }
załatwi sprawę czy trzeba coś jeszcze kombinować?
http://www.php.net/header('Content-Type: application/json');
wystarczy to
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)