[PHP/AJAX] Souci avec les fonctions... [Résolu/Fermé]

Signaler
Messages postés
20
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
16 février 2012
-
Messages postés
20
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
16 février 2012
-
Bonjour,

J'aimerai avoir une petite aide de votre part pour mon problème suivant: je voudrais pouvoir tout simplement changer le contenu d'une div sans recharger la page, donc grâce à l'ajax et php, en cliquant sur des liens... par exemple j'ai un lien1 et je voudrait que la div ai le contenu1, lien2 -> contenu2, lien3 -> contenu3 ..etc

Alors çà marche mais bon, pas vraiment en faite ^^ , je vous colle mon code, si vous voulez le tester, suivez ce lien : http://www.ideesfrance.org/ajaxtest.php

/* code */
<?php

function affiche()
{
$reponse = new xajaxResponse();
$reponse->setCharEncoding('ISO-8859-1');
if (lien1)
{
$block = 'lien1 ok';
}
elseif (lien2)
{
$block = 'lien2 ok';
}
elseif (lien3)
{
$block = 'lien3 ok';
}
else
{
$block = 'raté';
}
$reponse->addAssign("block", "innerHTML", $block);
return $reponse->getXML() ;
}

function envoyer()
{
$reponse = new xajaxResponse();
$reponse->setCharEncoding('ISO-8859-1');
$reponse->addAssign("block", "innerHTML", '');
$reponse->addScript("xajax_affiche();");
return $reponse->getXML() ;
}

require("xajax.inc.php");
$xajax = new xajax();
$xajax->setCharEncoding('ISO-8859-1');
$xajax->decodeUTF8InputOn();
$xajax->registerFunction("envoyer");
$xajax->registerFunction("affiche");
$xajax->processRequests();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>test ajax</title>
<?php $xajax->printJavascript();?>
</head>

<body>
<a href="#" id="lien1" onclick="xajax_envoyer('lien1');">lien 1</a>
<a href="#" id="lien2" onclick="xajax_envoyer('lien2');">lien 2</a>
<a href="#" id="lien3" onclick="xajax_envoyer('lien3');">lien 3</a>
<div id="block">texte original</div>
</body>
</html>

Si vous avez une solution... elle est la bienvenue !

Merci ;)

5 réponses

Messages postés
6764
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
891
salut,

je ne sais pas ce qui ne colle pas dans ton code, d'autant que nous n'avons pas le code en entier.
j'ai utilisé récemment la lessive pour afficher un calendrier de mois en mois sans recharger, je te file le code qui me semble beaucoup plus simple, je ne sais plus où je l'ai trouvé.
le JS dans la page :
  <script type="text/javascript">

    function makeRequest(url) {

        var httpRequest = false;

        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            httpRequest = new XMLHttpRequest();
            if (httpRequest.overrideMimeType) {
                httpRequest.overrideMimeType(\'text/xml\');
            }
        }
        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() { modifyContents(httpRequest); };
        httpRequest.open(\'GET\', url, true);
        httpRequest.send(null);

    }

    function modifyContents(httpRequest) {

        if (httpRequest.readyState == 4) {
            if (httpRequest.status == 200) {
                document.getElementById("cible").innerHTML = httpRequest.responseText;
            } else {
                alert(\'Un problème est survenu avec la requête.\');
            }
        }

    }
</script>

le lien qui l'appelle :
<p><a href="#" onclick="makeRequest('script.php?variable=valeur')">Lien</a></p>

sachant que dans le script php il y a le traitement et qu'il me retourne du code html qui sera inclu dans le '<div id="cible">'.
quelque chose du genre :
<?php
if (isset($_GET['variable']))
{
        echo '<p>La variable est définie, elle vaut '.$_GET['variable'].'.</p>';
}
else
{
        echo '<p>La variable n'est pas définie.</p>';
}
?>

et c'est tout…
Messages postés
20
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
16 février 2012

si si le code est entier, le probleme est que si je clique sur 'lien1' ou 'lien2' ou 'lien3' j'ai toujours le texte 'lien1 ok' dans ma div ... rt pas le texte voulu comme dans mon code, suivant des conditions, comme je pourrais l'avoir avec un $_GET mais en rechargeant ma page par contre... chose justement que je voudrai éviter...

je vais étudier ce bout de code proposé déjà, mais si y'en a d'autres qu'i peuvent m'aider, toujours pas de refus ^^

edit: je ne souhaite pas pour ce cas là faire d'appel extérieur, je voudrais pouvoir tout faire depuis le même endroit :)
Bonsoir,

Il faut a un moment envoyer la valeur du lien au script php appelé.

Moi j'utilise la methode POST

// Requette AJAX
function makeRequest(url,valeur_lien,id_ecrire){ 
var http_request = false; 
//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs 
if (window.XMLHttpRequest) { // Mozilla, Safari,... 
http_request = new XMLHttpRequest(); 
if (http_request.overrideMimeType) { 
http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla 
} 
} else if (window.ActiveXObject) { // IE 
try { 
http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
} catch (e) { 
try { 
http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
} catch (e) {} 
} 
} 

if (!http_request) { 
alert('Abandon :( Impossible de créer une instance XMLHTTP'); 
return false; 
} 
http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } //affectation fonction appelée qd on recevra la reponse 
// lancement de la requete 
http_request.open('POST', url, true); 
//changer le type MIME de la requête pour envoyer des données avec la méthode POST , !!!! cette ligne doit etre absolument apres http_request.open('POST'.... 
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
 
data="val_lien="+valeur_lien; 
http_request.send(data); 
} 

function traitementReponse(http_request,id_ecrire) { 
var affich=""; 
if (http_request.readyState == 4) { 
if (http_request.status == 200) { 
// cas avec reponse de PHP en mode texte: 
//chargement des elements reçus dans la liste 
var affich_list=http_request.responseText; 
obj = document.getElementById(id_ecrire); 
obj.innerHTML = affich_list; 
} 
else { 
alert('Un problème est survenu avec la requête.'); 
} 
} 
} 


et l'appel de fonction:

<p><a href="#" onclick="makeRequest('script.php,'lien1','id_div_a_ecrire')">Lien1</a></p>
etc pour lien2 , lien3...

et script.php récupère la valeur du lien par

$val=$_POST['val_lien']
Messages postés
20
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
16 février 2012

Ah bah çà devrait faire l'affaire ^^ j'ai compris donc je testerai çà quand il fera jour :) j'avais essayé grosso merdo çà mais j'ai raté ... pas grave, çà ne fait pas de mal un petit coup de mains, merci, je vous tiendrais au jus ;)

je ne le mets pas comme résolu pour le moment
Messages postés
20
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
16 février 2012

Bonjour,

alors j'ai réussi à faire ce que je voulais, je vous colle le code final :( http://ideesfrance.org/ajaxtest.php pour tester )

<?php

function envoyer($lien)
{
$reponse = new xajaxResponse();
$reponse->setCharEncoding('ISO-8859-1');
$reponse->addAssign("block", "innerHTML", '');
if ($lien == lien1)
{
$block = 'lien1 ok';
}
elseif ($lien == lien2)
{
$block = 'lien2 ok';
}
elseif ($lien == lien3)
{
$block = 'lien3 ok';
}
else
{
$block = 'raté';
}
$reponse->addAssign("block", "innerHTML", $block);
return $reponse->getXML() ;
}

require("xajax.inc.php");
$xajax = new xajax();
$xajax->setCharEncoding('ISO-8859-1');
$xajax->decodeUTF8InputOn();
$xajax->registerFunction("envoyer");
$xajax->registerFunction("affiche");
$xajax->processRequests();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>test ajax</title>
<?php $xajax->printJavascript();?>
</head>

<body>
<a href="#" id="lien1" onclick="xajax_envoyer('lien1');">lien 1</a>
<a href="#" id="lien2" onclick="xajax_envoyer('lien2');">lien 2</a>
<a href="#" id="lien3" onclick="xajax_envoyer('lien3');">lien 3</a>
<div id="block">texte original</div>
</body>
</html>


c'était vraiment tout bête, mais c'est toujours sur des choses faciles que l'on bute le plus ^^

problème résoudu !

merci ;)