Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requête jquery .post() qui ne retourne rien

Sujet résolu
    18 septembre 2019 à 7:55:30

    Bonjour à tous.

    Actuellement, je conçois un moteur de recherche pour mon site. Le traitement du mot-clé posté a premièrement été testé de manière classique (traitement via un script de la page "traitement_saisie_recherche.php" qui traite et affiche le résultat de la recherche. Jusque là, aucun problème.

    Je désire, cependant que la recherche s'effectue de manière asynchrone. J'ai donc ajouté une requête Jquery $.post() et j'ai pris soin de vérifier le statut de la requête qui, après exécution, affiche bien 200. Malheureusement, je constate que l'alerte ne retourne rien même sur la console du navigateur Chrome (appart le statut 200). Pensant tout d'abord que c'était lié au fait que les résultats provenaient d'un tableau, j'ai modifié la valeur de la variable "rendu" en une simple phrase de test, mais le résultat restait le même. Si quelqu'un peut m'éclairer, je suis tout ouïe et merci d'avance.

    Voici le codes concernés.

    traitement_saisie_recherche.php:

    <?php
    require_once "db.php";
    	if(isset($_POST['query']) && !empty($_POST['query'])){
    		$query = preg_replace("#[^a-zA-Z ?0-9]#i", "", $_POST['query']);
    		if($_POST['filtre'] == "Profil"){
    			$req = $pdo->prepare('SELECT id, utilisateur AS resultat FROM profils WHERE utilisateur LIKE ?');
    			$req->execute(array('%'.$query.'%'));
    		}
    		elseif($_POST['filtre'] == "Contenu"){
    			$req = $pdo->prepare('SELECT id, audio, auteur, titre, playlist AS resultat FROM contenu WHERE titre LIKE ? OR playlist LIKE ?');
    			$req->execute(array('%'.$query.'%', '%'.$query.'%'));
    		}
    		$count = $req->rowCount();
    		if($count >= 1){
    			while($data = $req->fetch(PDO::FETCH_OBJ)){
    				$r1 = $data->id;
    				$r2 = $data->resultat;
    				$rendu = 'id'.$r1.'profil:'.$r2;
    				echo $rendu;
    			}	
    		}
    		else{
    			echo "<p>Aucun résultat n'a été trouvé pour <strong>$query</strong>. Nous vous invitons à réessayer avec d'autres mots clés</p>";
    		}
    	}
    ?>

    recherche_jquery.js:

    $(document).ready(function(){
    	$(".window").submit(function(e){
    		e.preventDefault();
    		$.post('../dossier_php_traitement/traitement_saisie_recherche.php', {
    			query : $("query").val()
    		},
    		function(data){
    			alert(data);
    		});
    	});
    });




    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      18 septembre 2019 à 9:33:58

      Vu que l'élément query n'existe pas $("query").val() est sûrement vide... Si tu n'es pas familier avec jQuery tu ferais mieux d'utiliser du JavaScript natif ; ça t'évitera d'inclure toute une bibliothèque sur ton site juste pour utiliser une autre API.

      Accessoirement ça n'a pas de sens d'envoyer un POST pour une recherche. Si tu lis des données alors c'est un GET qu'il faut.

      • Partager sur Facebook
      • Partager sur Twitter
        18 septembre 2019 à 16:05:40

        Rebonjour,

        Je te remercie pour ton intervention MatTheCat, en effet, il y avait un problème niveau de "query". Cependant, l'élément existe bel et bien (c'est le name de l'input dont l'id est query et c'est ce dernier point que je n'avait pas précisé. J'avais, par ailleurs homis de traiter la seconde entrée du formulaire( une valeur d'un input radio de name filtre).

        Une fois ces points traités, j'ai obtenu le résultat espéré. :)

        Ps: pour la méthode .post(), il me semble que si on veut envoyer les données vers une page de traitement et ensuite récupérer le résultat (comme c'est le cas pour moi), la méthode post est plus appropriée. (à mon humble avis de débutant bien-sur, je me trompe peut-être)

        Voici le code modifier:

        $(document).ready(function(){
        	$("#gogo").on('click',function(e){
        		e.preventDefault();
        		var entree1 = $("input#query").val();
        		var entree2 = $("input[type=radio]").val();
        		$.post('../dossier_php_traitement/traitement_saisie_recherche.php', {
        			query : entree1, filtre : entree2
        		},
        		function(data){
        			$(".sortie").html(data);
        		});
        	});
        });



        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          18 septembre 2019 à 17:52:49

          $("query") sélectionne un élément <query>, qui n'existe pas.

          Pourquoi ne pas utiliser serialize au lieu de te compliquer la vie et de faire des erreurs ?

          Si tu es juste débutant, un "avis" ne suffit pas, et surtout pas pour contredire quelqu'un. Il y a des tonnes de ressources sur le net qui disent que POST sert à envoyer des données, et GET à les recevoir (d'où leur nom). Aussi si tu utilises n'importe quel moteur de recherche tu verras qu'une requête GET est envoyée. Ne te limite pas à ta seule vision des choses ^^

          -
          Edité par Anonyme 18 septembre 2019 à 17:53:12

          • Partager sur Facebook
          • Partager sur Twitter

          Requête jquery .post() qui ne retourne rien

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown