Création
d'entreprise
Posez votre question Signaler

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

alix387 16Messages postés 30 septembre 2007Date d'inscription - Dernière réponse le 3 oct. 2007 à 15:20
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 ;)
Lire la suite 

[PHP/AJAX] Souci avec les fonctions »

5 réponses
Réponse
+0
moins plus
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…
Ajouter un commentaire
Réponse
+0
moins plus
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 :)
Ajouter un commentaire
Réponse
+0
moins plus
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']
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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 ;)
Ajouter un commentaire
Ce document intitulé « [PHP/AJAX] Souci avec les fonctions... » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?