Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: AJAX nie wyświetla wyniku od PHP
Forum PHP.pl > Forum > XML, AJAX
dawid75291
Witam,
mam problem z AJAX-em, PHP i XMLHttpRequest.
Wysyłam pewną wartość poprzez funkcje searchVideo do PHP, który po prostu ma zwrócić to co jemu przekazałem (przykładowo), lecz AJAX nie wzraca nic, zaś funkcja, która wykonuje się po poprawnym wykonaniu zwraca to co chciałem. I nie wiem dlaczego :/ Używam kilka funkcji ajaxowych, które otrzymują coś od plików PHP i problemów nie było. Błędu też nie widzę. Z góry dziekuję za pomoc smile.gif

AJAX (odebranie od PHP)

Kod
$.ajax({
        url: "php/search.php",
        success: function(msg){
            alert("ajax: " + msg);
        },
        error: function(err)
        {
            console.log(err);
        }
    });


JS (XMLHttpRequest - wysyłanie do PHP przykładowej wartości)
Kod
function searchVideo() {
    var fd = new FormData();
    fd.append("title", document.getElementById('searchinput').value);
    var xhr = new XMLHttpRequest();
    xhr.addEventListener("load", searchVideoComplete, false);
    xhr.open("POST", "php/search.php");
    xhr.send(fd);
}
    
function searchVideoComplete (evt) {
    alert(evt.target.responseText);
}


PHP (ma po prostu zwrócić to co napisałem)
Kod
<?php
    require_once('connect.php');
    $tytul = $_POST['title'];
    echo $tytul;
?>


Scenariusz działania (dotychczasowego)
1. Wysyłam funkcją searchVideo wartość inputa z HTML powiedzmy niech to będzie np "Film"
2. PHP otrzymuje tą wartość
3. Funkcja searchVideoComplete() wypisuje w alercie "Film" (czyli prawidłowo)
4. AJAX również wywala alert ale w treści jest tylko "ajax:". A powinien wypisywać "ajax:film"
redeemer
1) metoda ajax z jquery przesyła dane metodą GET https://api.jquery.com/jQuery.post/
2) nie przesyłasz żadnych parametrów w requeście
dawid75291
Używałem również tej funkcji i jest to samo
Kod
$.post(
             "/php/search.php",
             {
                 title: document.getElementById("searchinput").value
                 },
             function(data) {
                 alert(data);
             }

          );


Funkcja function(data) przekazuje mi to co chce, lecz ajax nie. Jeśli zaś nadam na sztywno wartość zmiennej w PHP-ie, która ma być wyswietlona przez ajaxa to pokaże mi ją dobrze.
np.
Kod
$tytul = "Film";
           echo $film;


Jakich parametrów bo nie za bardzo rozumiem. Jest tam podane co i gdzie ma być przekazane, no chyba, że o czymś zapomniałem. Choć wątpie, bo używam podobnych funkcji do wysyłania danych do innych plikow .php i wszystko działa (zapisuje rekordy w bazie, oraz dobrze je wyświetla za pomocą JSON+AJAX), ale zaś w tej funkcji coś się rypie
nospor
Sprawdzales czy o to
document.getElementById("searchinput").value
wogole zawiera co ma zawierac?

alert(document.getElementById("searchinput").value);
dawid75291
Tak sprawdzałem alertem. I wartość się pokazuje poprawnie.
Kod
<div id="wyszukiwarka">
                    <p> Wyszukaj film: </p>
                    <input type="text" placeholder="Wyszukaj film ..." id="searchinput" name="searchinput"  onkeyup="searchSuggest();">
                    <input type="submit" id="submit_wyszukiwarka" value="Szukaj" onclick="searchVideo()"/>
                    <div id="search_suggest"></div>
                </div>


ten searchinput to po prostu pole do wprowadzania tytułu filmu, który ma być wyszukany w bazie.
Może znacie inne metody przekazać taką zmienną do PHP-a, a on potem zwraca tablice JSONową ?
trueblue
Cytat(dawid75291 @ 9.04.2014, 19:15:33 ) *
Funkcja function(data) przekazuje mi to co chce, lecz ajax nie.

Funkcja function(data) w tym miejscu odbiera dane, a nie przekazuje.
Co to znaczy, że "ajax nie"? Masz na myśli Twój pierwszy przykład? Bo $.post to również wywołanie ajaxowe.

Próbowałeś zmienić parametr 'type' w wywołaniu $.ajax na 'POST'? Domyślnie przesyłanie jest poprzez GET.
dawid75291
Tak, rzeczywiście odbiera odbiera. Mój błąd, chodziło mi właśnie o to.
Tak, sprawdzałem również z typem POST i było to samo. Dziwne jest to, że funkcja odbierająca searchVideoComplete zwraca to co chce (też odbiera od PHP odpowiedź, ale poprawną), a AJAX jakby nie widział tej wartości, która zostałą przekazana do PHP.
trueblue
Spróbuj pokazać więcej kodu - umieść w nim potrzebne fragmenty, a resztę wyrzuć.
dawid75291
Prosze. Myśle, że to wystarczy

HTML
Kod
<div id="wyszukiwarka">
                    <p> Wyszukaj film: </p>
                    <input type="text" placeholder="Wyszukaj film ..." id="searchinput" name="searchinput"  onkeyup="searchSuggest();">
                    <input type="submit" id="submit_wyszukiwarka" value="Szukaj"/>
                    <div id="search_suggest"></div>
                </div>

JS
Kod
function searchVideo() {
var fd = new FormData();
fd.append("title", document.getElementById('searchinput').value);
var xhr = new XMLHttpRequest();
xhr.addEventListener("load", searchVideoComplete, false);
xhr.open("POST", "php/search.php");
xhr.send(fd);
}

function searchVideoComplete (evt) {
alert(evt.target.responseText);

}
$(document).ready(function(){
$.ajax({
        url: "php/search.php",
        success: function(msg){
            alert("ajax: " + msg);
            msg = msg.replace(/}{/g, "},{");
            msg = "[" + msg + "]";
            var obj = $.parseJSON(msg);
            var lang = '';
             $.each(obj, function() {
            document.getElementById("uzytkownika").innerHTML += "<li id='li_lista'><div id='film'>" +  
                                  "<a href='" + this['sciezka'] + "'>" +
                                  "<img id='zdjecie' onmouseover='funkcja(this)'" +
                                  " onmouseout = funkcja_powrot(this)  src='images/60.jpg'></a><p> Tytul: " +
                                  this['tytul'] + "</p><p> Opis: " + this['opis'] + "</p><p> Autor: " +
                                  this['autor'] + "</p><p> Ocena: " + this['ocena'] +
                                  "</p><a href='" + this['sciezka'] + "'>" + this['tytul'] +
                                  "</a></br></div></li>";
            });
        },
        error: function(err)
        {
            console.log(err);
        }
    });
}

PHP
Kod
<?php
    require_once('connect.php');

    $sql_popularne = "SELECT Id, Tytul, Ocena, Wyswietlenia, Autor, Opis, Sciezka FROM movies WHERE Tytul LIKE '".$_POST['title']."' ORDER BY Wyswietlenia DESC";


    $query = mysql_query($sql_popularne);
    $count = mysql_num_rows($query);
    if($count > 0){
        while($row = mysql_fetch_array($query))
        {
            $wyswietenia = $row["Wyswietlenia"];
            $tytul = $row["Tytul"];
            $ocena = $row["Ocena"];
            $autor = $row["Autor"];
            $opis = $row["Opis"];
            $sciezka = $row["Sciezka"];
            
            $info_video = array('tytul'=>$tytul, 'opis'=>$opis, 'autor'=>$autor, 'wyswietlenia'=>$wyswietenia, 'ocena'=>$ocena, 'sciezka'=>$sciezka);
            echo json_encode($info_video);
        }
        
    }
    
    else
    {
            
    }
    
?>
nospor
Moze podaj jakis aktualny kod, bo nie dosc ze korzystasz z funkcji searchSuggest() ktorej nigdzie deklaracji nie widac, to kod ajaxowy z JQuery nie jest w ogole uzuwany przy szukaniu i w nim w ogole nie przekazujesz title.... :/
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.