11521 sujets

JavaScript, DOM et API Web HTML5

J'obtiens le résultat d'une requete ajax sous cette forme
&idUtilisateur=1&sexe=1&age=32
Comment puis-je à partir de cette chaine extraire les trois variables idUtilisateur, sexe et age ?

idUtilisateur = valeur de idUtilisateur
sexe= valeur de sexe
age= valeur de age

Je suis sûr que c'est tout simple, mais je me casse le nez dessus depuis plusieurs jours.
Merci de votre aide.
Merci Jencal.
En fait, j'obtiens cette chaine de caractères dans un retour ajax

 $.ajax({
                          type: "POST",
                          url: 'login.php',
                          data: dataString,
                          dataType: "html",
                          success: function(data) {
                              if (data == 0) {
                                  $('#errormess').html("identifiant ou mot de passe non reconnu");
                              } else {
                                  $('#errormess').html(data);  
                                
                             }
                          }


Si je recevais des variables sous format json, ce serait plus simple.
Mais si je remplace dataType: "html" par dataType: "json", je ne reçois plus aucun résultat.
Je n'arrive pas à trouver un seul tutorial avec un exemple de passage de données entre php et jquery ajax qui me permette de comprendre quelle est mon erreur.
Et ceci après plusieurs journées sur google.
Je me demande si je ne ferais pas mieux de tout réaliser directement dans php et de n'utiliser javascript que pour enregistrer des données ou modifier directement les éléments html.
Qu'en penses-tu ?
Si tu change HTML pour JSON normal qu'il plante, car tu lui envoie pas de JSON. après rien ne t'empeche d'envoyer du json si tu l'adapte au préalable... en PHP tu parse ton JSON.

en faite faudrait savoir véritable ce que tu souhaite passer a ton PHP.. un tableau ? une chaine de caractère ? un objet json ??
Voici mon html

 <div id="connexion">
            <form  method="post" action="">
                   <input type="text" id="login" placeholder="votre identifiant">
                   <br /> 
                   <input type="password" id="password" placeholder="votre mot de passe">
                   <br />
                   <input name="Submit" type="submit" id="ok" value="OK" class="btn btn-primary btn-sm">;
                   <br /> <br />
                   <span id="errormess">retour</span>
            </form >
        </div>
    </div>


Voici mon ajax

 $("#ok").click(function() {
                        var login = $("#login").val();
                        var password = $("#password").val();
                        var dataString = 'login:'+ login + '&password:' + password;
                        $.ajax({
                          type: "POST",
                          url: 'login.php',
                          data: dataString,
                          dataType: "html",
                          success: function(data) {
                              if (data == 0) {
                                  $('#errormess').html("identifiant ou mot de passe non reconnu");
                              } else {
                                  $('#errormess').html(data);  
                                
                             }
                          }
                       });
                      return false;
                });


et voici mon php

 function envoi($var, $val){
        echo "&".$var."=".urlencode(utf8_encode($val));
    }
 $sql = "SELECT * FROM utilisateurs WHERE login = '$login' AND password = '$password'";
   $result = $conn->query($sql);
   if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $idUtilisateur= $row["id"];
            envoi("idUtilisateur",$idUtilisateur);
            $genre= $row["genre"];
            envoi("genre",$genre);
            $today=time();
            $semaine=strftime('%W',$today) ;
            envoi("semaine",$semaine);
           $nom= $row["nom"];
            envoi("nom",$nom);
        }
là où sa coince c'est que tu envoie UNE seul chaine de caractère :

 var dataString = 'login:'+ login + '&password:' + password;


alors que toi tu souhaite envoyer -> DEUX paramètres.

dans ce cas la syntaxe est comme suit :
data: { // au sein de $ajax
    login: "xxx",
    password: "yyy"
}


avec type: 'POST',
Modifié par JENCAL (24 Mar 2016 - 17:31)
Le script php fonctionne bien puisque j'obtiens les variables
$idUtilisateur, $genre, $semaine et $nom
Là où ça coince, c'est dans le renvoi de ces variables vers ajax dans
success: function(data) {
if (data == 0) {
$('#errormess').html("identifiant ou mot de passe non reconnu");
} else {
$('#errormess').html(data);

}

Je voudrais obtenir les variables
idUtilisateur, genre, semaine et nom à partir des variables correspondantes dans php qui sont bien envoyées puisque la chaine data est
&idUtilisateur=1&genre=1&semaine=12&nom=toto
ah my bad,

et comment tu fais en php pour générer cela ?
au pire, encode en json en PHP puis parse en Javascript
Tu peux me montrer à partir de mon code. J'ai besoin d'apprendre et je n'ai pas trouvé un seul exemple qui correspond à ce que je cherche à faire.
La plupart des script utilisent php pour modifier les éléments html de la page sans revenir vers ajax.

var exemple = 'a=1&b=2&c=3&d=4&e=5';
eval(exemple.replace(/(\w+?)=(.*?)(&|$)/g, 'var $1="$2"\x3B')); 
console.log(a); //1
console.log(b); //2
console.log(c); //3


Smiley youpi Smiley dehors
Bonjour,

Teste un truc du genre :
$ligne = [];
$retour = [];

$sql = "SELECT * FROM utilisateurs WHERE login = '$login' AND password = '$password'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
	$ligne['id'] = utf8_encode($row["id"]);
	$ligne['genre'] = utf8_encode($row["genre"]);
	$today=time();
	$ligne['semaine'] = utf8_encode(strftime('%W',$today) );
	$ligne['semaine'] = utf8_encode($row["nom"]);
	array_push($retour, $ligne);
}

echo json_encode($retour);

Modifié par SolidSnake (25 Mar 2016 - 10:21)
Je n'obtiens rien dans errormess ni avec dataType:"json" ni avec dataType:"html"


  $ligne = [];
    $retour = [];

   $sql = "SELECT * FROM utilisateurs WHERE login = '$login' AND password = '$password'";
   $result = $conn->query($sql);
   if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $ligne['id'] = utf8_encode($row["id"]);
            $ligne['genre'] = utf8_encode($row["genre"]);
            $today=time();
            $ligne['semaine'] = utf8_encode(strftime('%W',$today) );
            $ligne['semaine'] = utf8_encode($row["nom"]);
            array_push($retour, $ligne);
        }  
       echo json_encode($retour);
    }   


 $.ajax({
                          type: "POST",
                          url: 'login.php',
                          data: dataString,
                          dataType: "json",
                          success: function(data) {
                              if (data == 0) {
                                  $('#errormess').html("identifiant ou mot de passe non reconnu");
                              } else {
                                  
                                  $('#errormess').html(data);
                                 
                             }
                          }
                       });
                      return false;


Par contre, avec ce code et le dataType "html"dans ajax, j'obtiens la chaîne : "idUtilisateur:1""genre:1""semaine:12"
Mais je ne sais pas comment extraire de cette chaine les variables idUtilisateur, genre et semaine avec leur valeur respective.


 $sql = "SELECT * FROM utilisateurs WHERE login = '$login' AND password = '$password'";
   $result = $conn->query($sql);
   if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $idUtilisateur= $row["id"];
             echo json_encode("idUtilisateur:".$idUtilisateur);
            $genre= $row["genre"];
             echo json_encode("genre:".$genre);
            $today=time();
            $semaine=strftime('%W',$today) ;
             echo json_encode("semaine:".$semaine);
        }
   }
Eureka ! J'ai enfin extrait mes variables

dUtilisateur = data.split("&")[0];
 genre = data.split("&")[1]
 semaine = data.split("&")[2];
 alert ("idUtilisateur= " + idUtilisateur);
 alert ("genre= " + genre);
 alert ("semaine= " + semaine);
 $('#errormess').html(data.split("&"));
]
Le plus simple, pour voir si tu as un joli JSON, c'est d'appeler ta page directement dans ton navigateur et en modifiant légèrement pour les tests ton PHP pour qu'il ait des valeurs login/password par défaut.
...à partir de là, qu'est-ce que ça te sors ?

EDIT : je vois que tu as réussi (félicitation), mais ce serait bien de le faire fonctionner avec du JSON, c'est plus propre (enfin, je trouve).
Modifié par SolidSnake (25 Mar 2016 - 11:59)
Après une semaine de pédalage dans la choucroute, je déteeeeste json Smiley smile
Je reprendrai plus tard. Mais si ma solution fonctionne, c'est déjà pas mal, non.
Par contre, je vais devoir extraire les variables avec split, mais dans une boucle des résultats obtenus dans un array.
J'espère qu'il est facile de passer de ma solution pour une chaine de caractères à un array.
salut,
pourquoi se torturer autant ? Si tu as besoin de recevoir des éléments en JSON, tu les encodes en PHP et tu les envoies. Ensuite côté JS, tu passe par JSON.parse()
Merci les amis : je sais maintenant envoyer des variables sous format json dans php et les recevoir et analyser (parse) dans ajax.
Ca m'a pris une semaine, mais c'est vraiment une bonne chose de faite.
Bon dimanche. Smiley smile