11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

Je valide un formulaire avec du jquery/ajax genre :
	$.ajax({
		type		: 'POST',
		url			: 'php/mail.php',
		data		: result,
		dataType	: 'json', 
		encode		: true
	})
	.done(function(data) {...

et je récupère tout ca dans une page php qui renvoi un message en cas de succès du genre :
...
if ( ! empty($errors)) {
	// si erreurs
	$data['success'] = false;
	$data['errors']  = $errors;
} else {
//si pas d'erreurs
	$data['success'] = true;
	$data['message'] = 'Success!';
}...

Tous ca fonctionne tres bien.

Sauf que lorsque que je rajoute du code pour faire quelque chose dans le "else" avant l'envoi de "true" et de "success!", ca le fait mais ca n'envoie plus les "true" et de "success!", si bien que ma page html reste bloquée parce qu'elle ne reçoit pas les messages de succès. Si j'enlève le code en plus ca marche nickel.

Une idée ?
Modifié par fabriceb (09 Aug 2016 - 11:50)
J'ai essayé un envoi de mail.


...
if ( ! empty($errors)) {
	$data['success'] = false;
	$data['errors']  = $errors;
} else {
	//envoi email
	$sujet = 'Sujet de l\'email';
	$message = 'message test';
	$destinataire = "f.xxxxxxxxxxx@xxx.fr";
	$headers = "From: \"xxxxxxxx\"<contact@xxxxxxxx.com>\n";
	$headers .= "Reply-To: contact@xxxxxxxxx.com\n";
	$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"";
	if(mail($destinataire,$sujet,$message,$headers)){
		echo "L'email a bien été envoyé.";
                //envoi data ajax
		$data['success'] = true;
	        $data['message'] = 'Success!';
	}else{
		echo "Une erreur c'est produite lors de l'envois de l'email.";
                $data['success'] = false;
	        $data['message'] = 'erreur mail!';
	}
}

Le mail est bien envoyé par le php mais la page du form ne recoit pas

$data['success'] = true;
$data['message'] = 'Success!';


PS désolé pour le "e". Je corrige
Modifié par fabriceb (09 Aug 2016 - 11:49)
Bon finalement j'ai testé en retirant les "echo" :
if ( ! empty($errors)) {
	$data['success'] = false;
	$data['errors']  = $errors;
} else {
	//envoi email
	$sujet = 'Sujet de l\'email';
	$message = 'message test';
	$destinataire = "f.xxxxxxxxxxx@xxx.fr";
	$headers = "From: \"xxxxxxxx\"<contact@xxxxxxxx.com>\n";
	$headers .= "Reply-To: contact@xxxxxxxxx.com\n";
	$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"";
	if(mail($destinataire,$sujet,$message,$headers)){
                //envoi data ajax
		$data['success'] = true;
	        $data['message'] = 'Success!';
	}else{
                $data['success'] = false;
	        $data['message'] = 'erreur mail!';
	}
}


et ca a l'air de vouloir fonctionner.

Si quelqu'un peux m'expliquer pourquoi le fait de faire un "echo" bloquait l'envoi de "$data", je suis preneur.
La fonction doit être structurée avec la commande `return`, non ? Si oui l'incompatibilité avec `echo` est normale.