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
4 Réponses :
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.
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?
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
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 () code> pour n'importe quel champ que vous essayez de rechercher.
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 ().
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();
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?
On dirait que
SearchText code> doit être défini sur
$ ('[nom = Search_filter]'). Val () code> ou autre que
$ ('# # # Rechercher " ) .val () code> (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 code> 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é
ettrue
), 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 ditou autre chose que $ ('# search-form'). val ()
. Envoyertrue
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.