Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][Symfony][SF2] Problem z odczytem odpowiedzi ajax
Forum PHP.pl > Forum > PHP > Frameworki
michau85
Witajcie

Poprzez żądanie ajax przekazuje parametr do kontrolera.Parametr ten wykorzystuje do pobrania z bazy tablicy obiekietów
  1. public function ajaks2Action(Request $request) {
  2.  
  3.  
  4. $tag = $request->request->get('tag');
  5. $repository = $this->getDoctrine()->getRepository('SklepBundle:Ksiazka');
  6. $qb = $repository->createQueryBuilder('k');
  7. $qb->where('k.autor LIKE :autor OR k.tytul LIKE :tytul ');
  8. $qb->setParameter('autor', '%' .$tag. '%');
  9. $qb->setParameter('tytul', '%' .$tag. '%');
  10. $tab = $qb->getQuery()->getResult();
  11. $s=json_encode($tab);
  12. return new Response($s);
  13. }
  14.  


Mam jednak problem z wyświetleniem rezeltatów. Gdy chce wyświetlić pojedyńczą wartość (tak jak kodzie poniżej) - nie dostaję nic.

  1. $.ajax({
  2. url: "{{ path('ajaks2') }}",
  3. type: "POST",
  4. dataType: 'json',
  5. data: {"tag": te},
  6. success: function (data) {
  7. $('#res').text(data[0]['autor'])
  8.  
  9. }
  10. });
  11.  


Gdy w parametrze success wpiszę $('#res').text(data)) to jako wynik wyrzucane są zakodowane obiekty [object Object],[object Object]

Z góry dziekuje za pomoc

P.S Jeśli w kontrolerze zamiast doctrine stworzę własną tablicę - wszystko działa bez zarzutu. Mogę bez problemu odwoływać się do konkretnych elementów.
nospor
Nie sadzisz ze najszybciej by bylo sprawdzic co tam masz?

console.log(data);

I wszystko nagle staje sie jasne
michau85
Nie znałem tego polecenia. Wstawiłem je i nie działa. sad.gif
kpt_lucek
@up
Żeby nie było, to polecenie w JS wink.gif
[JAVASCRIPT] pobierz, plaintext
  1. function (data) {
  2. console.log(data);
  3.  
  4. }
[JAVASCRIPT] pobierz, plaintext
michau85
Wstawiłem do parametru success i w oknie przeglądarki jest pusto
  1.  
  2. $.ajax({
  3. url: "{{ path('ajaks3') }}",
  4. type: "POST",
  5. dataType: 'json',
  6. data: {"tag": te},
  7. success: function (data) {
  8. console.log(data)
  9.  
  10. }
  11. });
  12.  
kpt_lucek
Dlaczego w oknie przeglądarki?

Korzystasz z narzędzi developerskich dostarczonych do przeglądarki (nawet IE je ma biggrin.gif)?
michau85
Ok dzięki, już widzę że mam puste obiekty bez żadnych wlaściwości. Nie wiem tylko dlaczego.
Boshi
prawdopodobnie musisz użyć
https://developer.mozilla.org/en-US/docs/We.../JSON/stringify

jak Ty używasz ajaxa bez sprawdzania co ci zwraca przez narzędzia dev haha.gif da się to tak?

http://stackoverflow.com/questions/9218900...n-object-object
michau85
Dzięki za wskazówki. JSON.stringify () nie pomogło. sad.gif Pomijając zastosowanie dodatkowych funkcji to jeśli w kontrolerze zamiast doctrine stworzę własną tablicę - wszystko działa bez zarzutu. Mogę bez problemu odwoływać się do konkretnych elementów.
maly_swd
daj $tab = $qb->getQuery()->getResult(AbstractQuery::HYDRATE_ARRAY)

a na samej górze klasy USE Doctrine\ORM\AbstractQuery;
michau85
Cytat(maly_swd @ 28.09.2016, 12:57:46 ) *
daj $tab = $qb->getQuery()->getResult(AbstractQuery::HYDRATE_ARRAY)

a na samej górze klasy USE Doctrine\ORM\AbstractQuery;



DziałA!!! Bardzo serdecznie Ci dziękuję smile.gif smile.gif
Pilsener
Pozwolę sobie dodać parę wskazówek:
1. Polecam narzędzie do debugowania dostarczane wraz z frameworkiem - profiler. Każdy request (także via ajax) jest szczegółowo rozpisany
2.
  1. $tag = $request->request->get('tag');
- nie poleca się używania parametrów wprost z requesta, powinna być walidacja, formularz, param converter etc.
3.
  1. $repository = $this->getDoctrine()->getRepository('SklepBundle:Ksiazka');
- pomijając kwestie nazewnictwa, repozytoria powinny być rejestrowane jako serwisy i wstrzykiwane jako zależność, powinno się unikać korzystania z kontenera
4.
  1. $qb = $repository->createQueryBuilder('k');

- do tak prostego zapytania raczej nie jest potrzebny query builder, wystarczy użyć gotowych, frameworkowych metod do wyszukiwania
- po co korzystać z ORM jak i tak piszemy zapytania "z palca" a wynik zrzucamy do tablicy? Lepiej wtedy używać czystego PDO - odpada nauka doctrine + DQL + narzut wydajności
- kontroler nie jest odpowiednim miejscem do obróbki danych
5.
  1. $s=json_encode($tab);
  2. return new Response($s);
- framework powinien już zawierać metodę JsonResponse
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.