Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mvc][ajax] Jak poprawnie zwrócić dane ajaxem
Forum PHP.pl > Forum > Przedszkole
kamil_lk
Cześć.

Pracuję obecnie nad projektem w którym wykorzystuję wzorzec MVC.
Mój problem polega na tym, że chcę wyciąganąć dane z bazy przy pomocy ajaxa.
Lecz zamiast danych z bazy otrzymuję to co zawiera cały plik (jego całą strukturę) ajax.php
W jaki sposób mogę to ładnie zrobić, aby zwracało mi to co zwraca funkcja pobierz w moim przykładzie?

index.html
  1. <!doctype html>
  2. <meta charset="utf-8">
  3. <title>Dokument bez tytułu</title>
  4. <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.0.js"></script>
  5. </head>
  6.  
  7. <form action="" method="post">
  8. <select name="name"></select>
  9. <input type="button" name="execute" id="execute" value="Execute" />
  10. </form>
  11. <script type="text/javascript">
  12. $(function(){
  13.  
  14. $.ajax({
  15. type: "POST",
  16. url: "ajax.php",
  17. success: function(msg) {
  18. alert( "Dane zwrotne: " + msg );
  19. },
  20. error: function() {
  21. alert( "Wystąpił błąd w połączniu!!!");
  22. }
  23. });
  24.  
  25. });
  26. </body>
  27. </html>


ajax.php
  1. <?php
  2. echo "asd<br />";
  3.  
  4. function pobierz(){
  5.  
  6. $tab = array('Kamil', 'Piotr', 'Michał'); //te dane są ładowane z bazy
  7. return $tab;
  8. }
  9.  
  10. pobierz();
  11. echo "<br />zxc<br />";
  12. ?>
viking
A gdzie tu wzorzec MVC? Czy masz to postawione na jakimś serwerze z obsługą PHP?
Turson
die; na koncu metody
matiit
Po co wywołujesz funkcję pobierz? Serio pytanie, bo nie widzę sensu po co wywoływać funkcję na marne?
Turson
matiit, bo to "MVC" tongue.gif

Autorze tematu, jeżeli zwróconą tablicę z php chcesz wykorzystać w js, to należy najpierw w php przekonwertować ją w jsona json_encode(), dać print_r a w js jsona odebrać i sparsować
kamil_lk
W podanym przykładzie mvc nie jest zaimplementowane.
Chodzi o to, gdy mamy plik ajax.php sa w nim wyświetlane różne dane takie jak:
-asd
-zxc
oraz jest wywoływana moja funkcja pobierz, która zwraca nam tablicę z danymi.

I teraz chcę, aby dane przesłąne z powrotem do pliku index.html zawierały tylko to co zwraca funkcja pobierz, bez 'asd', 'zxc'
matiit
Kod
<?php
    function pobierz(){

        $tab = array('Kamil', 'Piotr', 'Michał'); //te dane są ładowane z bazy
        return $tab;
    }

    echo pobierz();
?>
Turson
Bez sensu. Zwróci ci całą zawartość pliku i to normalne. Daj tą funkcję do pustego pliku

@up
raczej print_r
matiit
Jasne, jak to jest arrayka, to print_r, a najlepiej json_encode smile.gif
kamil_lk
W podany sposób? Cały czas wywala "Wystpił błąd w połączeniu"

  1. <script type="text/javascript">
  2. $(function(){
  3.  
  4. $.ajax({
  5. dataType: "JSON",
  6. type: "POST",
  7. url: "ajax.php",
  8. success: function(msg) {
  9. alert( "Dane zwrotne: " + msg );
  10. },
  11. error: function() {
  12. alert( "Wystąpił błąd w połączniu!!!" );
  13. }
  14. });
  15.  
  16. });


  1. <?php
  2. header('Content-Type: application/json');
  3. echo "asd<br />";
  4.  
  5. function pobierz(){
  6.  
  7. $tab = array('Kamil', 'Piotr', 'Michał');
  8. print_r(json_encode($tab));
  9. }
  10.  
  11. pobierz();
  12. echo "<br />zxc<br />";
  13. ?>
Turson
Nie słuchasz nas. Mówiliśmy, że masz mieć w tym pliku dane które zwracasz.
dataType: "JSON" jak i nagłówek są niepotrzebne.
Poza tym po co tu ajax skoro nic nie wysyłasz?
np. $('#dane').load('ajax.php')
kamil_lk
Turson, dzięki.
Zrobiłem za pomocą funkcji die($dane_które_zwraca_metoda); i nie parsuje całej strony od nowa smile.gif
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.