Problème Ajax

noone67210
Invité n'ayant pas de compte PHPfrance

10 avr. 2010, 11:49

Bonjour,

pour un projet nous sommes entrain de vouloir actualisé juste une partie d'un site donc en ajax actualisé juste une div aperemment notre code ne fonctionne pas donc si quelqu'un voit une erreur flagrante ici :S ?

function lanceAjax()
{

var httpRequest = false;

if (window.XMLHttpRequest) { // Mozilla, Safari,...
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType) {
httpRequest.overrideMimeType('html/javascript');
// Voir la note ci-dessous ? propos de cette ligne
}
}
else
if (window.ActiveXObject) { // IE
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
}
}
}

if (!httpRequest)
{
alert('Abandon :( Impossible de cr?er une instance XMLHTTP');
return false;
}

//httpRequest.onreadystatechange = function()
// {
// liste(httpRequest);
// };
httpRequest.open("POST", "acc_ajax.php", true);
httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
var param = "aff_page="+this.id;
alert(param);// ici variable
httpRequest.send(param);


}





et dans une autre page.php (la div que l'on veut actualisé )

<?php
$t = $_POST['aff_page'];
echo "contenu_ajax.innerHTML=".$t.";";
?>



merci beaucoup d'avance

Eléphanteau du PHP | 11 Messages

10 avr. 2010, 11:55

biensur il y a :

Code : Tout sélectionner

var presentation = document.getElementById("presentation"); var actualites = document.getElementById("actualites"); var agenda = document.getElementById("agenda"); var critiques = document.getElementById("critiques"); var histoire = document.getElementById("histoire"); var photos = document.getElementById("photos"); var disco = document.getElementById("disco"); var events = document.getElementById("events"); var formu = document.getElementById("formu"); var mail = document.getElementById("mail"); var lien = document.getElementById("lien"); var aff_page; presentation.onclick=lanceAjax actualites.onclick=lanceAjax agenda.onclick=lanceAjax critiques.onclick=lanceAjax histoire.onclick=lanceAjax photos.onclick=lanceAjax disco.onclick=lanceAjax events.onclick=lanceAjax formu.onclick=lanceAjax mail.onclick=lanceAjax lien.onclick=lanceAjax

devlop78
Invité n'ayant pas de compte PHPfrance

10 avr. 2010, 14:44

Je trouve ton code assez bizarre. Avec tous ces try et catch. Mais bon ...

presentation.onclick=lanceAjax
actualites.onclick=lanceAjax
agenda.onclick=lanceAjax
critiques.onclick=lanceAjax
histoire.onclick=lanceAjax
photos.onclick=lanceAjax
disco.onclick=lanceAjax
events.onclick=lanceAjax
formu.onclick=lanceAjax
mail.onclick=lanceAjax
lien.onclick=lanceAjax

pourquoi pas déjà mettre lanceAjax(), puisque c'est une fonction, et rajouter ';' après chacun. J'imagine que le problème n'est pas là mais tu as demandé si je voyais qqchose qui me chocait et ça ça me choque ;)

Eléphanteau du PHP | 11 Messages

10 avr. 2010, 15:25

Bas non c'est de l'évènementiel java script y'a pas besoin et pis les onlick marchent le alert se fait bien mais ca se rafraichit quand même pas : (

devlop78
Invité n'ayant pas de compte PHPfrance

10 avr. 2010, 16:16

Débeug !!! Mets des alert() un peu partout et voit jusqu'ou ça va

par exemple

opération 1
alert('1');
opération 2
alert('2');
opération 3
alert('3');

Et si tu vois par exemple que l'alerte 3 ne s'affiche pas, tu verras à peu près où ça coince.

Eléphanteau du PHP | 11 Messages

10 avr. 2010, 16:43

Mais justement tout passe sauf que ca actualise pas au final, j'ai déjà testé des alert partout

Mammouth du PHP | 661 Messages

10 avr. 2010, 16:55

Mais justement tout passe sauf que ca actualise pas au final, j'ai déjà testé des alert partout

heu ... dans ta fonction, ou se trouve la ligne sensée inscrire le retour d'ajax dans la div en question ??

ou traites tu la réponse du serveur ?

Eléphanteau du PHP | 11 Messages

10 avr. 2010, 17:24

Mais justement tout passe sauf que ca actualise pas au final, j'ai déjà testé des alert partout

heu ... dans ta fonction, ou se trouve la ligne sensée inscrire le retour d'ajax dans la div en question ??

ou traites tu la réponse du serveur ?

pas sur de comprendre de quoi tu me parle je suis pas ultra confirmé en ajax :S

Mammouth du PHP | 661 Messages

10 avr. 2010, 18:33

bon, le principe de l'ajax, c'est qu'un script javascript appel une page pour récupérer une réponse (header, text, xml, ...) ensuite, il utilise cette réponse pour faire quelquechose (ici modifier le contenu d'une div ... c'est ça ?)

actuellement, une fois la réponse reçue tu n'en fait pas grand chose !... donc comment veux tu que la div change !?

Mammouth du PHP | 661 Messages

10 avr. 2010, 19:16

bon, je vais t'en dire plus, car il se peux que tu ne vois pas ce qui cloche ::

tu as une fonction : httpRequest.onreadystatechange = function() qui dans l'état ne sert à rien !... // c'est une fonction qui est pourtant appelée à chaque changement d'état de la requete ... (appel de la page, connexion, récupération des données, ...)

ton objet httpRequest est utile, car il va contenir la réponse de ta requete ajax, tu dois donc le vérifier et l'utiliser dans la fonction ci-dessus

if(httpRequest.readyState == 4)
document.getElementById('idDeTaDiv).innerHTML = httpRequest.responseText;

1. on vérifie que la requête s'est correctement réalisée,
2. on inscrit dans la div la réponse reçue ... (tu va surement devoir refaire ton php pour avoir le résultat souhaité ;)

@+

PS : quel tuto t'as utilisé pour faire ça ?

Eléphanteau du PHP | 11 Messages

10 avr. 2010, 19:25

Euh le tuto je sais plus mais il balancait juste un peu de code comme ça :S

voici ou j'en suis :


function lanceAjax()
{

var httpRequest = null;
var param = "aff_page="+this.id;
alert(param);

if (window.XMLHttpRequest) { // Mozilla, Safari,...
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType) {
httpRequest.overrideMimeType('html/javascript');
// Voir la note ci-dessous ? propos de cette ligne
}
}
else if (window.ActiveXObject) { // IE
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
document.getElementById('contenu_ajax').innerHTML = 'Impossible de communiquer avec le serveur';
}
}
}

if (!httpRequest)
{
alert('Abandon :( Impossible de cr?er une instance XMLHTTP');
return false;
}

httpRequest.onreadystatechange = function()
{

if( httpRequest.readyState == 4 )
{
if( httpRequest.status == 200 )
{
if ( httpRequest.responseText != "" )
{
document.getElementById('contenu_ajax').innerHTML = httpRequest.responseText ;
}
else
{
document.getElementById('contenu_ajax').innerHTML = httpRequest.responseText ;


}
}
else
{
document.getElementById('contenu_ajax').innerHTML = 'Une erreur est survenue : ';
}

}
};

httpRequest.open("POST", "acc_ajax.php", true);
httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
var param = "aff_page="+this.id;
//alert(param);// ici variable
httpRequest.send(param);


}

presentation.onclick=lanceAjax
actualites.onclick=lanceAjax
agenda.onclick=lanceAjax
critiques.onclick=lanceAjax
histoire.onclick=lanceAjax
photos.onclick=lanceAjax
disco.onclick=lanceAjax
events.onclick=lanceAjax
formu.onclick=lanceAjax
mail.onclick=lanceAjax
lien.onclick=lanceAjax
histoire.onclick=lanceAjax
photos.onclick=lanceAjax
disco.onclick=lanceAjax
events.onclick=lanceAjax
formu.onclick=lanceAjax
mail.onclick=lanceAjax
lien.onclick=lanceAjax

Eléphanteau du PHP | 11 Messages

10 avr. 2010, 19:46

et voici le code php :

<?php
$t = $_POST['aff_page'].".php";
echo "contenu_ajax.innerHTML='".include("$t")."'";

?>
Modifié en dernier par noone67 le 11 avr. 2010, 16:37, modifié 2 fois.

Eléphanteau du PHP | 11 Messages

10 avr. 2010, 20:00

Bon ca marche merci vraiment à tous pour votre aide :D

par contre sur ma div qui se change j'ai un truc bizarre qui s'écho : contenu_ajax.innerHTML=1

Sinon ca include bien les autres pages comme il faut :D

Eléphanteau du PHP | 11 Messages

11 avr. 2010, 16:16

Par contre j'ai un autre problème maintenant, le fait que je fait du innerHTML de certaines pages php bas les formulaire de ces pages php ne sont pas envoyé donc ca pose problème :S ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 avr. 2010, 09:20

Modération :
Afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute