0
votes

Comment obtenir les valeurs du formulaire HTML dans Ajax

Je fais un projet dans django qui est une application Web de location / vente de voitures, la requête de recherche fonctionne, mais lorsque j'essaie de soumettre mon formulaire en ajax, il semble qu'il n'atteigne jamais ajax.

Failed to load resource: the server responded with a status of 500 (Internal Server Error)
search_car.js:25 Internal Server Error


3 commentaires

On dirait que SearchText doit être défini sur $ ('[nom = Search_filter]'). Val () ou autre que $ ('# # # Rechercher " ) .val () (comme la première réponse suggérée, si vous souhaitez envoyer toutes les entrées de formulaire). En outre, ne ressemble pas à votre prix SELECT ferme.


@ mark.hch j'ai essayé votre version pour le searchText et il imprime vrai, quand j'ai réellement besoin des valeurs. L'identifiant de la voiture n'est pas défini, donc je ne peux pas accéder à la voiture.


Oui, je n'ai pas réellement vérifié le type d'élément ou la valeur intégrée (étant respectivement masqué et true ), je viens de voir le nom et j'ai deviné (si je publiais une réponse vs un commentaire que j'ai peut-être mis plus de temps à lire) - c'est pourquoi j'ai dit ou autre chose que $ ('# search-form'). val () . Envoyer true seul n'aide certainement pas, mais vous avez accepté la réponse à laquelle je faisais référence avec (comme la première réponse suggérée ...) , donc tout va bien. A bientôt.


4 Réponses :


0
votes

Le $ ('# search-form') n'a aucune valeur, car c'est un formulaire. Vous avez besoin de la valeur de . Si vous devez envoyer toutes les données du formulaire, vous devez utiliser:

$(document).ready(function() {
    $('#search-form').on('submit', function(e) {
        e.preventDefault();
        $.ajax({
            url: '/cars/search_car/?search_filter=' + searchText,
                type: 'GET',
                data: $('#search-form').serialize(),
                success: function(resp) {
                var newHtml = resp.data.map(d => {
                    return `<div class="cars">
                        <a href="/cars/${d.id}">
                        <h4>${d.type}</h4>
                        <p>${d.price}</p>
                    </a>
                    </div>`
                });
                $('.cars-index').html(newHtml.join(''));
                $('.search-form').val( '');
            },
            error: function(xhr, ststus, error) {
                console.log(error);
            }
        })

    });
});

Dans votre appel AJAX, veuillez changer de cette façon:

data: $('#search-form').serialize(),

Et assurez-vous que vous avez l'attribut name pour tout et qu'il soit également mis en correspondance dans le backend.


2 commentaires

Je n'ai pas l'identifiant de la voiture, donc je ne peux pas accéder à la voiture.


@SachihiroTakamori Je n'ai pas compris. Pouvez-vous expliquer s'il vous plaît?



0
votes

Je pense que ce qui ne va pas avec le code est ce var searchText = $ ('# search-form'). val (); Vous devez obtenir la valeur de chaque champ par leur propre sélecteur, vous ne pouvez pas simplement obtenir toutes les valeurs du formulaire avec le sélecteur de formulaire. Essayez la console en enregistrant le searchText et voyez s'il a réellement une valeur


2 commentaires

Juste pour info - OP a déclaré J'ai imprimé searchText et i [t] n'imprime rien - vous avez donc tout à fait raison.


Oui, c'est le problème là-bas, essayez YourInputName.val () pour n'importe quel champ que vous essayez de rechercher.



0
votes

Vous accédez à la valeur du formulaire avec. Fonction Val (). Ce qui est incorrect Comme le formulaire contient plusieurs éléments enfants, il ne vous renverra pas de valeur. Si vous devez accéder au texte de recherche, il doit s'agir d'un contrôle d'entrée comme $ ('# from-place'). Val ().


0 commentaires

-1
votes

La ligne

let formString = $("#search-form").serialize();

attribue à searchText une valeur de chaîne vide. Ce que vous voulez, c'est:

var searchText = $('#search-form').val();


1 commentaires

Cela pourrait-il avoir quelque chose à voir avec le fait que vous utilisez une méthode GET pour soumettre un formulaire, au lieu d'un POST?