Travailles-tu sous Linux ? Si oui, il faut revoir la procédure d'installation de Lamp et démarrer ton serveur Apache.
Par ailleurs et sur la base du code Ajax que tu as posté, je pense que tu as quelques erreurs logiques.
Il faut savoir que Ajax effectue un appel asynchrone (parallèle et en arrière-plan) au serveur Web et donc reçoit la réponse du serveur d'une manière asynchrone. C'est à dire que ton navigateur ne sait pas quand-est-ce qu'il recevra la réponse d'une requête Ajax asynchrone. C'est pour cette raison que l'on est obligé de déléguer la tâche de réception d'une réponse attendue à une fonction résidente qui se comporte comme un écouteur et qui reste active jusqu'à la réception de la réponse du serveur préalablement appelé par Ajax.
Pour ce faire, Ajax déploie l'événement
onReadyStateChange qui écoute le canal de communication entre Ajax et le serveur et retourne les changements d'état et notamment si une réponse est renvoyée par le serveur.
Quand la propriété
readyState est à la valeur 4, Ajax a déjà contacté le serveur Web et se met en attente de sa réponse et si la propriété
status est à 200, la réponse tant attendue est en vue.
Code : Tout sélectionner
xhr.onreadystatechange = function() {
if(xhr.readyState == 4) { // En attente d'une réponse du serveur
if (xhr.status == 200){ // Réponse reçue
alert(xhr.responseText);
window.status = "Ajax a reçu une réponse du serveur.";
}
else { // Toujours en attente
window.status = "En attente...";
} // fin if 2
}// fin if 1
} // fin de l'écouteur d'états
Cette fonction ne sera bien sûr exécutée qu'après avoir démarrer l'appel d'Ajax au serveur Web par:
Code : Tout sélectionner
// Démarrage de l'appel Ajax
xhr.open("GET", "PHP_Jours_Fermeture.php", true);
xhr.send(null);
La méthode
Open construit l'entête HTTP d'appel, elle précise l'url du serveur, la méthode de postage (GET ou POST) et le mode de communication (TRUE = communication asynchrone ou FALSE = communication non asynchrone)
La méthode
Send envoie la requête HTTP en passant éventuellement les paramètres de postage. C'est cette méthode qui démarre finalement l'appel Ajax.
Après la méthode
Send aucune autre instruction Ajax n'est effective car il est trop tard puisque l'appel est déjà effectué et Ajax bascule en mode écoute du serveur appelé.
Exactement comme si on tape une url dans navigateur, quand on valide l'url, le navigateur appelle le serveur, et reste en attente de sa réponse. Et tant que le serveur n'a pas répondu, le navigateur reste figé.
D'ailleurs c'est tout l'intérêt de l'usage d'Ajax : éviter de figer le navigateur. Le processus Ajax s'occupe en arrière-plan de la communication avec le serveur et de récupérer des données dynamiques alors que le navigateur reste actif pour permettre à l'utilisateur de faire autres choses.
Je pense que c'est cette partie fondamentale du fonctionnement d'Ajax qui manque dans ton script.
Voici le récap:
Code : Tout sélectionner
<script type="text/javascript">
// Tentative de création de l'objet XMLHTTPRequest d'Ajax (XHR)
var xhr;
try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); }
catch (e)
{
try { xhr = new ActiveXObject('Microsoft.XMLHTTP'); }
catch (e2)
{
try { xhr = new XMLHttpRequest(); }
catch (e3) { xhr = false; }//fin try/catch
}//fin try/catch
} //fin try/catch
// Si l'objet XHR est bien construit, programmer alors la fonction qui recevera la réponse Ajax
xhr.onreadystatechange = function() {
if(xhr.readyState == 4) {
if(xhr.status == 200) {
// La réponse est prête et reçue
alert (xhr.responseText);
window.status = "Ajax a reçu une réponse du serveur.";
}
else { // Sinon, Ajax est toujours en attente de la réponse
window.status = "Ajax est en attente d'une réponse du serveur...";
} //fin if status
} //fin if readyState
}; //fin onReadyStateChange
// Démarrage de l'appel Ajax
xhr.open("GET", "http://localhost/Ajax/test.php", true);
xhr.send(null);
</script>
Je rappelle le script PHP (PHP_Jours_Fermeture.php):
<?php
// début de connexion
$link = mysql_connect('localhost', 'root', 'tsstsstss') or die("Connexion non établie");
mysql_select_db("Planning", $link) or die("Base de données non ouverte");
$sql = "SELECT * FROM T_Fermeture LIMIT 0,30";
$resultat = mysql_query ($sql, $link) or die("Erreur de requête");
$tab = array();
// si il y a résultat non vide
if ($resultat && mysql_num_rows($resultat) >0){
// parcourir le résultat pour en extraire les enregistrements (lignes)
while ($row = mysql_fetch_array($resultat)){
// dans cet exemple, on stocke l'enregistrement lu dans un tableau $tab
$tab[] = $row;
}
// affiche tout le tableau $tab
print_r($tab);
}
// sinon : le résultat est vide
else echo "Réponse vide!";
// fin de connexion
mysql_close($link);
?>