Traitement Formulaire Ajax + Php

Eléphant du PHP | 447 Messages

18 déc. 2009, 10:02

Hi everyone! : )

J'essaie de comprendre comment fonctionne l'interaction ajax-php pour le traitement d'un formulaire... Après des heures de recherches et de lecture j'ai bricolé le code ci-dessous; mais je n'obtiens pas le résultat escompter (exécution du code php + affichage résultat exécution dans la page).

Pourriez svp analyser mon code et me dire comment le faire fonctionner?

La page du formulaire, index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">

	<head>
		<title>test...</title>
		<meta http-equiv="content-type" content="text/html;charset=utf-8" />
		<script type='text/javascript'>
		function testajax () {

			var texte = document.getElementById("field1").value;

			var xhr_object = null;

			if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();
			else if(window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
			else {

				alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
				return;

			}

			xhr_object.open("POST", "./ajax.php", true);

			xhr_object.onreadystatechange = function() {

				if(xhr_object.readyState == 4) {

					document.getElementById("put").innerHTML = xhr_object.responseText;

				}

			}

			xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			var data = "field1="+texte;
			xhr_object.send(data);

		}
		</script>
	</head>

	<body>
		<form>
			<input type="text" id="field1" name="field1" />
			<input type="submit" value="go" onclick="testajax()" />
		</form>
		<div id="put"></div>
	</body>

</html>
Le fichier de traitement, ajax.php
<?php
$field1 = $_POST['field1'];

echo $field1;
?>
Il ne se passe rien côté affichage après envoi du formulaire... Alors je suppose (s'il n'y a pas d'erreur côté javascript!) que ça vient du fichier ajax.php: ce n'est pas comme ça qu'on récupère les variables dans un tel cas...
Probably (only a) Human Problem?

Eléphant du PHP | 65 Messages

21 déc. 2009, 10:51

Bonjour,
Le problème vient du bouton d'envoi :
<input type="submit" value="go" onclick="testajax()" />
qui soumet le formulaire sans attendre le résultat de la requete ajax.
Un input de type "button" serait plus approprié,
<input type="button" value="go" onclick="testajax()" />
mais il ne faudra alors pas oublier de soumettre le formulaire (si le test est positif) dans testajax().
Fred

Eléphant du PHP | 447 Messages

21 déc. 2009, 11:28

Oui effectivement le blem venait de là...

Merci Fred!
Probably (only a) Human Problem?