Mostrar resultados de búsqueda al escribir AJAX y PHP

Estoy tratando de hacer algún tipo de búsqueda en vivo con ajax para mostrar una lista de usuarios mientras escribe en una barra de búsqueda. Estoy luchando para devolver los datos y mostrarlos en mi opinión.

lo que he intentado hasta ahora:

Mi guión JQuery:

$(document).ready(function (){
        const base_url = 'php echo base_url();?';
        $("#search_user").keyup(function (e){
            e.preventDefault();
            const val = $(this).value;
            $.ajax({
                type: "POST",
                url: base_url + "/public/Friendcontroller/search", // the method we are calling
                data: {search:val},
                dataType: "json",
                success: function (result) {
                    response(result);
                    console.log("Success",result);
                },
                error: function (result) {
                    console.error("unsuccessful",result);
                }
            });
        });
});

Mi función controladora y función modelo:

Función de búsqueda del controlador

public function search(): array
    {
       return $this->friend_model->liveSearch($_POST['search']);
    }

Función modelo

public function liveSearch($val) {
        $search = array();
        $result = $val;

        $getUser = "SELECT * FROM users WHERE userName LIKE '%$result%' OR firstName LIKE '%$result%'
                        OR lastName LIKE '%$result%'";

        $query = $this->db->query($getUser);

        foreach ($query->getResult() as $row) {
            $userID = $row->userID;
            $firstName = $row->firstName;
            $lastName = $row->lastName;
            $userName = $row->userName;
            $avatar = $row->avatarUrl;
            array_push($search, array('userID' => $userID, 'firstName' => $firstName,
                'lastName' => $lastName, 'userName' => $userName, 'avatarUrl' => $avatar));
        }
        return $search;
    }

El HTML donde quiero dar los resultados:

php foreach (//Result from AJAX call here): ?

= $result['userName'] ?

= $result['firstName'] . " " . $result['lastName'] ?

Pregunta hecha hace 3 años, 5 meses, 0 días - Por bitwisewizard


4 Respuestas:

  • Creo que debe devolver el array json codificado o "build" y devolver una cadena html para anexarlo donde quiera éxito

    Si devuelves una cadena html entonces puedes hacer esto con éxito

    success: function (result) {
                    $("your div").html(result);
                    console.log("Success",result);
                }
    

    Si vuelves json return json_encode($search); entonces usted debe iterar sobre cada fila y crear / Apéndice los elementos que desea.

    Respondida el Dec 17, 2020 a las 11:53 - por algorithmalchemist

    Votos positivos: 0 | Votos negativos: 0

  • Ya no puedes usar php en el html porque ya ha sido ejecutado servidorside,

    tiene que reconstruir el html con javascript, algo como:

    success: function (result) {
        var $container = $('#resultContainer');
        $.each(result,function(i,res){
            $container.append('

    '+res.userName+'

    '); }); },

    Respondida el Dec 17, 2020 a las 11:58 - por algorithmwizard

    Votos positivos: 0 | Votos negativos: 0

  • Para mostrar los resultados de la búsqueda en tiempo real utilizando AJAX y PHP, primero necesitas realizar algunas correcciones en tu código.

    • En tu script jQuery, cuando obtienes el valor de la búsqueda, debes usar `$(this).val()` en lugar de `$(this).value` para obtener el valor del campo de búsqueda correctamente.
    • En tu controlador, necesitas devolver los resultados de la búsqueda como un JSON. Puedes hacerlo de la siguiente manera:
    php
    public function search()
    {
        $results = $this->friend_model->liveSearch($_POST['search']);
        echo json_encode($results);
    }
    
    • En tu script jQuery, necesitas iterar sobre los resultados devueltos por AJAX y luego insertar los resultados en el HTML. Puedes hacerlo de la siguiente manera:

    javascript success: function (result) { $.each(result, function(index, user) { var html = `<div class="tabs-stage"> <div class="container"> <div class="person"> <div class="personHead"> <div class="profile"> <img class="head3" id="avatar" src="<?=base_url()?>/public/uploads/avatars/` + user.avatarUrl + `"/> </div> <div class="personName"> <h2>` + user.userName + `</h2> <h4>` + user.firstName + ` ` + user.lastName + `</h4> </div> </div> </div> </div> </div>`; $('<h31>search-results').append(html);</h31> }); }

    • En tu HTML, necesitas tener un contenedor donde se mostrarán los resultados de la búsqueda. Puedes agregar un div con un id de `search-results`. También, debes corregir la forma en que haces el bucle `foreach` en PHP:
    html
    
    • En tu HTML PHP, debes hacer el bucle correctamente para mostrar los resultados de la búsqueda devueltos por AJAX:
    html
    
        

    Con estas correcciones, tu función de búsqueda en vivo debería funcionar correctamente y mostrar los resultados de la búsqueda a medida que escribes en la barra de búsqueda. Recuerda también verificar la consola del navegador para ver si hay errores en la respuesta AJAX.

    Respondida el Dec 18, 2020 a las 11:57 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema aquí es que no estás procesando la respuesta de la llamada AJAX correctamente.

    En tu función de éxito AJAX, debes analizar la respuesta JSON y luego usarla para actualizar tu HTML.

    Aquí tienes un ejemplo de código actualizado:

    Script JQuery:

    $(document).ready(function () { const base_url = '<?= base_url() ?>/'; $("<h29>search_user").keyup(function (e) {</h29> e.preventDefault(); const val = $(this).val(); $.ajax({ type: "POST", url: base_url + "/public/Friendcontroller/search", data: { search: val }, dataType: "json", success: function (result) { $("<h27>search_results").html("");</h27> $.each(result, function (index, data) { $("<h26>search_results").append(`</h26> <div class="tabs-stage"> <div class="container"> <div class="person"> <div class="personHead"> <div class="profile"> <img class="head3" id="avatar" src="${base_url}/public/uploads/avatars/${data.avatarUrl}" /> </div> <div class="personName"> <h2>${data.userName}</h2> <h4>${data.firstName} ${data.lastName}</h4> </div> </div> </div> </div> </div> `); }); }, error: function (result) { console.error("unsuccessful", result); }, }); }); });

    En el código actualizado, hemos agregado un div con el ID search_results donde mostraremos los resultados de la búsqueda. Luego, en la función de éxito AJAX, iteramos sobre la respuesta JSON y agregamos cada resultado a #search_results utilizando jQuery.

    Respondida el Dec 18, 2020 a las 11:59 - por Gemini

    Votos positivos: 0 | Votos negativos: 0