Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][AJAX] Zwracanie rekordów w pętli
Forum PHP.pl > Forum > Przedszkole
Fred1485
Cześć,

Myślałem, że pójdzie łatwo a tutaj niestety z wielkim problemem się spotkałem, do rzeczy:

  1. try {
  2. $string = $_POST['string'];
  3.  
  4. $database = new PDO('mysql:host=localhost;dbname=x', 'x', 'xi');
  5. $database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6. $database->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  7.  
  8. $query = $database->query("SELECT imie, nazwisko, klasa FROM uczniowie WHERE imie LIKE '%$string%'");
  9.  
  10. while($s = $query-> fetch()) {
  11. echo json_encode($s['imie']);
  12. }
  13. }
  14. catch(Exception $e) {
  15. //chwilowo niepotrzebne
  16. }


  1. $(function() {
  2. $('input').on('input', function() {
  3. var value = $(this).val();
  4.  
  5. $.ajax({
  6. type: 'post',
  7. url: 'search.php',
  8. dataType: 'json',
  9. data: {
  10. string: value
  11. },
  12. success: function(data) {
  13. $('#result').html(data);
  14. },
  15. error: function() {
  16. alert('blad');
  17. }
  18. });
  19. });
  20. });


Wywala cały czas błąd, zaznaczam że jak by był jeden rekord zwrócony w zapytaniu to wszystko działa, czy nie da rady w pętli przekazać wyników?
Szymciosek
Jaki błąd?

Nie możesz przenieść iteracji z php do js?
Zwracasz wtedy cały wynik i iterujesz po nim po stronie klienta.
Fred1485
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?
Fred1485
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ę
Pyton_000
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.
Fred1485
czyli tak?

  1. try {
  2. $string = $_POST['string'];
  3.  
  4. $database = new PDO('mysql:host=localhost;dbname=x', 'x', 'xi');
  5. $database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6. $database->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  7.  
  8. $query = $database->query("SELECT imie, nazwisko, klasa FROM uczniowie WHERE imie LIKE '%$string%'");
  9.  
  10. $result = $query->fetchAll();
  11. }
  12. catch(Exception $e) {
  13. //chwilowo niepotrzebne
  14. }
Turson
Wypluj json_encode($result)
a w JS w success ajaxa $.parseJSON i iterujesz w JS
Fred1485
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ę:

  1. string(104) "[{"imie":"Patryk","nazwisko":"Szybki","klasa":"1LI"},{"imie":"Patrycja","nazwisko":"Lama","klasa":"1Z"}]"
Turson
Jak wypluwasz JSONa?
Fred1485
  1. $result = $query->fetchAll();
  2. die(json_encode($result));
  3.  
Pyton_000
json jest poprawny, w takim razie Twój JS leży
Fred1485
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:

  1. var data = [
  2. {
  3. "imie": "Patryk",
  4. "nazwisko": "Szybki",
  5. "klasa": "1LI"
  6. },
  7. {
  8. "imie": "Patrycja",
  9. "nazwisko": "Lama",
  10. "klasa": "1Z"
  11. }
  12. ]
  13.  
  14. for(var i=0;i<=a.length;i++) {
  15. alert(a[i].imie);
  16. }
  17.  
  18.  


przecież działa w 100% czy jest to zgodne ze 'standardami'?
nospor
Cytat
/ tak w istocie to po tutaj używać $.parseJSON? Skoro do tablicy to wszystko wywalić to ta funkcja będzie odpowiednia?

Oczywiscie ze juz nie musisz stososowac $.parseJSON, gdyż śląc ajaxa okresliles, ze dane mają byc JSON i jquuery konwertuje to na JSON automatycznie, tak wiec w success masz juz poprawną tablice JSON. Teraz wystarczy tylko ze poniej ziterujesz.


ps: oczywiscie oprocz json_encode($result), wypadaloby rzucic odpowiednim naglowkiem informujac przelgadarke ze to JSON idzie.
Fred1485
  1. header('Content-Type: application/json');
załatwi sprawę czy trzeba coś jeszcze kombinować?
nospor
wystarczy to
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.