Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][AJAX] Zwracanie rekordów w pętli
Fred1485
post 20.06.2015, 13:05:06
Post #1





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


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?


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
Szymciosek
post 20.06.2015, 13:10:40
Post #2





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


Jaki błąd?

Nie możesz przenieść iteracji z php do js?
Zwracasz wtedy cały wynik i iterujesz po nim po stronie klienta.
Go to the top of the page
+Quote Post
Fred1485
post 20.06.2015, 14:24:18
Post #3





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


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?


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
Szymciosek
post 20.06.2015, 15:18:02
Post #4





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


Lekturka:

https://developer.mozilla.org/en-US/docs/We...ects/JSON/parse

https://developer.mozilla.org/en-US/docs/We.../JSON/stringify
Go to the top of the page
+Quote Post
Fred1485
post 20.06.2015, 16:53:49
Post #5





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


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ę


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
Pyton_000
post 20.06.2015, 16:58:41
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Pyton_000 20.06.2015, 16:58:56
Go to the top of the page
+Quote Post
Fred1485
post 20.06.2015, 17:14:14
Post #7





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


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. }


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
Turson
post 20.06.2015, 17:17:17
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Wypluj json_encode($result)
a w JS w success ajaxa $.parseJSON i iterujesz w JS
Go to the top of the page
+Quote Post
Fred1485
post 20.06.2015, 17:30:32
Post #9





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


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"}]"


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
Turson
post 20.06.2015, 17:37:22
Post #10





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Jak wypluwasz JSONa?
Go to the top of the page
+Quote Post
Fred1485
post 20.06.2015, 17:40:36
Post #11





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


  1. $result = $query->fetchAll();
  2. die(json_encode($result));
  3.  


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
Pyton_000
post 20.06.2015, 18:09:45
Post #12





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


json jest poprawny, w takim razie Twój JS leży
Go to the top of the page
+Quote Post
Fred1485
post 20.06.2015, 18:28:57
Post #13





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


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'?

Ten post edytował Fred1485 20.06.2015, 18:37:47


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
nospor
post 21.06.2015, 11:02:17
Post #14





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Fred1485
post 21.06.2015, 11:22:00
Post #15





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


  1. header('Content-Type: application/json');
załatwi sprawę czy trzeba coś jeszcze kombinować?


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
nospor
post 21.06.2015, 11:26:48
Post #16





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




wystarczy to


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 22:14