Ajax ne fonctionne pas... ?

Fermé
Fetide68 Messages postés 746 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 16 septembre 2024 - 1 juin 2011 à 14:48
Fetide68 Messages postés 746 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 16 septembre 2024 - 1 juin 2011 à 18:36
Bonjour,

Je n'arrive pas à utiliser Ajax sur un serveur (IZIHOST)... Ça ne marche pas non plus en local, mais j'ai simplifié le code pour chercher l'erreur et je ne la trouve pas...

J'ai juste demandé à JavaScript de m'indiquer quand le navigateur est prêt pour recevoir la requête. Donc avec ce code là, je devrais avoir un alert qui s'affiche "je suis pret". Or, ça ne réagit pas...

function getXMLHttpRequest() {
	var xhr = null;
	
	if (window.XMLHttpRequest || window.ActiveXObject) {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} 
			catch(e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			xhr = new XMLHttpRequest(); 
		}
	} 
	else {
		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
		return null;
	}
	return xhr;
}

function getDPE() {
	var xhr = getXMLHttpRequest();
	
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
			alert ("je suis pret");
		} 
	};	
}

3 réponses

et la suite alors... lol :)
la tu nous sert ta fonction callback qui sera execute au retour d'une reponse mais tu n'a rien envoyé comme demande au serveur: donc tu n'aura jamais de reponse.

function getDPE() {
	var xhr = getXMLHttpRequest();
	
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
			alert (xhr.responseText);
		} 
	};
        var noCache = "?t=" + new Date().getTime(); // et oui les navigateur sont paresseux, ils vont pas a tous les coup interroger le serveur :)
	xhr.open("GET", "scriptTraitantLademande.php"+noCache, true); // GET: methode de transmission des donnée, scriptTraitantLademande.php : il traitera ta demande et te renvera une reponse , true: pour faire de l'asynchrone 
        // si tu est en POST alors instruction a rajouter: xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

        xhr.send(null); // envoi effectif de la demande, null pour dire ke tu ne passe pas de parametre, normal ici on est en get
        
}


scriptTraitantLademande.php:
<?php 
...
...
...
echo "je suis pret"; // au retour de cette fonction ce qui est dans le onreadystatechange sera executé. mais pas avant !!!!!
?>

essaye deja ça et apres on affinera.
2
Fetide68 Messages postés 746 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 16 septembre 2024 32
Modifié par Fetide68 le 1/06/2011 à 16:24
Je croyais que le javascript s'exécutait dans l'ordre et donc que le xhr.onreadystatechange préparait la requête, alors j'avais réduit ma requête pour chercher d'ou venait l'erreur... Et comme, le onreadystatechange ne répondait pas, je me suis dit que c'était ça...

Mais en fait mon problème semble venir de la méthode post :

voilà ma fonction complète (elle est pas longue):
function getDPE(id) { 
 var xhr = getXMLHttpRequest(); 
 dpe = document.getElementById('dpe'); 
  
 xhr.onreadystatechange = function() { 
  if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) { 
   dpe.innerHTML = xhr.responseText; 
  }  
 }; 
  
 xhr.open("POST", "construction/dpe.php", true); 
 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
 xhr.send("ref="+id); 
} 


En GET ça marche, mais pas en POST...

Je vais le faire en GET (moins sécurisé ??) mais j'aimerais quand même comprendre mon erreur...

Au passage que fait exactement :
var noCache = "?t=" + new Date().getTime();  


Je n'ai jamais eu de problème pour l'instant sur le rafraîchissement des pages apellées...

Merci pour ton aide. +1 !
0
ya pas de raison que le POST ne fonctionne pas !!! en general si ya un souci ce que soit tes données transmise sont incorrect ou parfois le chemin d'accès a l'url est incorrect, soit tu ne les recupere pas correctement.
Fais voir ton script dpe.php .

var noCache = "?t=" + new Date().getTime(); permet juste d'empecher le navigateur de nous revoyé ce qu'il mis dans son cache. C'est un probleme qui arrive souvent quand on fait de l'ajax. c'est tant mieu pour toi si ton navigateur est bien configurer pour ne pas te reservir le cache. du coup, pour ne pas prendre de risque, on interroge a chaque fois avec une url differente : ça m'etonnerai qu'on puisse le faire plusieur fois en une seconde :) !!! bon bref voila pour plus de details ya pas mal de litterature la dessus sur le net.
0
Fetide68 Messages postés 746 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 16 septembre 2024 32
1 juin 2011 à 18:36
Désolé j'ai trouvé mon erreur, mais c'est pas évident à trouver tout de suite...

Dans ma page de réponse, j'avais mis ça :
$id=isset($_POST['id']) ? intval($_GET['id']) : null

Faut savoir...

Merci à toi
0