11548 sujets

JavaScript, DOM et API Web HTML5

Bonsoir,

Je voudrais faire une boucle if selon ce que retourne html(data), ainsi comment obtenir une variable retournée par "form_treatment.php" ? J'aimerais effectuer une action selon la variable php retournée à ajax par html(data) Smiley smile

$('#myForm').submit(function() {
  var myForm = $(this);
  $.ajax({
    type: 'POST',
    url: 'form_treatment.php',
    data: myForm.serialize(),
    success: function (data) {
       $('#message').html(data);
       // Make a if loop according to what returns html(data)
    }
  }); 
  return false;
});



form.php :
<form method="post" action="form_treatment.php" >
    <input type="text" name="user_name" value="Your name..." /> 
    <button type="submit" >OK</button>
</form>



form_treatment.php :
<?php if ( empty($_POST['user_name']) ){      
        $a = false;
        $b = "Name already used.";      
} else { 
    $already_existing = verify_existence( $_POST['user_name'] ); 
    // verification in the DB, return true or false
    if( $already_existing ){
        $a = false;
        $b = "Name already used.";
    } else {    
        $a = true;
        $b = "Verification is OK";
    }
}

Modifié par Tchernobyl (30 Nov 2011 - 00:55)
Hello.

html(data) ne renvoie rien. html(htmlString) en jQuery se contente d'insérer le contenu de htmlString dans la sélection courante.

Tu dois traiter data au niveau de ta fonction de callback success.

De plus actuellement, ton form_treatment.php ne renvoie rien, il n'y a aucun echo ou fonction de la sorte. Tu dois produire du Json, du XML ou du HTML ; enfin quelque chose que ta requête Ajax puisse récupérer et traiter dans ses callbacks.

Selon le format choisi, vu que tu utilises $.ajax plutôt qu'une méthode de haut niveau comme load(), pense à préciser ton dataType dans les options de $.ajax, ou à faire renvoyer par ton serveur le bon type mime, ou mieux les deux histoire d'être logique.

Point de détail, plutôt que d'utiliser success, utilise la forme avec les callback des objets Deferred qui va devenir la norme à plus ou moins long terme :
$.ajax({
//options
})

//Executé quoi qu'il arrive
.then(callback)

//Executé en cas de succès de la requête
.done(callback)

//Executé en cas d'echec de la requête (404, timeout)
.fail(callback)
Salut, pourrais-tu m'indiquer comment implémenter précisément mon script AJAX avec ces fonctions en tenant compte de mon 1er post ? Je t'avoue que là je suis dépassé par le niveau.
En reprenant mon post précédent. Tu dois déjà modifier ton fichier PHP pour qu'il retourne quelque chose. Juste pour l'exemple je vais partir sur du Json:
if( $already_existing ) {
	//ton $a ne sert à rien, il sera toujours égal 
	//a = true

	//$b, n'est pas très explicite comme nom de variable
	$log = 'Name already used.'
} else {
	$log = 'Verification is OK.'
}
echo '{
	"exist": $already_existing
	"log": "'.$log.'"
}';
et le JS commenté
$.ajax({
	dataType: 'json'
	//plein d'autres options
})

//Executé quoi qu'il arrive
.then(function() {
	//Les arguments de ce callback varient selon le succès ou non de la requête
})

//Executé en cas de succès de la requête
//equivaut à ton success
.done(function(data) {
	//Ici data correspond au Json renvoyé par le PHP
	if (data.exist === true) {
		//traitement si OK
	} else {
		//traitement si pas OK
	}
})

//Executé en cas d'echec de la requête (404, timeout)
.fail(function(jqXHR, textStatus, errorThrown) {
})
J'ai écrit ça de tête et vite fait (pas trop le temps là), n'hésite pas en cas d'erreur ou d'imprécisions.
Modifié par Florian_R (30 Nov 2011 - 20:58)
Super, par contre pourquoi utiliser .then() (Executé quoi qu'il arrive) en même temps que .fail() qui assure un comportement en cas de problème ? En principe faire un script ajax avec un success() puis un fail() ensuite au cas où devrait suffire non ?
Je l'avais mis pour l'exemple. Mais oui, si tu n'as pas de code commun à done et fail, pas besoin de then.