[AJAX] php include refresh sélectif

Résolu
ajax.include -  
Tiller Messages postés 783 Statut Membre -
Bonjour,

j'ai ça pour l'instant
<div id="orange">
<?
switch(@$_GET['truc']) {
case 'lol':
include'hello.html';
break;
case 'lul':
include'salut.html';
break;
default:
include'silly.html';
}
?>
</div>

quand ça include ça refresh toute la page
donc je souhaiterais utiliser de l'ajax pour ne rafraichir que le div (orange) et pas la reste
(si le javascript est désactivé idéalement il faudrait que ça ~dégrade correctement)
je sais que c'est possible, malheureusement je ne suis pas doué en ajax
(pas d'iframe je précise)
qq1 aurait une idée? (voire une url avec un tutoriel?)
Configuration: Windows XP
Internet Explorer 7.0

7 réponses

  1. Tiller Messages postés 783 Statut Membre 211
     
    (si le javascript est désactivé idéalement il faudrait que ça ~dégrade correctement)

    Pas trop compris sa.. Si ton javascript est désactivé, l'AJAX ne marchera pas, puisque c'est du pur javascript. De mon point de vue, je considere qu'une personne ayant désactivé le javascript n'a rien a faire sur mon site, donc je me pose pas trop se genre de question d'habitude.

    Ensuite tu peux très bien faire quelque chose du genre:
    Page 1:
    <script>
    //On declare la "fonction AJAX"
    function getXhr()
    {
    	if(window.XMLHttpRequest)
    		xhr = new XMLHttpRequest(); 
    	
    	else if(window.ActiveXObject)
    	{
    		try
    		{
    			xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		} 
    		catch (e)
    		{
    			xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	}
    	else
    	{
    		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    		xhr = false; 
    	} 
    	
    	return xhr;
    }
    
    function refresh(pg)
    {
    	var xhr = getXhr();
    	xhr.onreadystatechange = function()
    	{
    		if (xhr.readyState == 4 && xhr.status == 200)
    		{
    			reponse = xhr.responseText;
    			document.getElementById('orange').innerHTML = reponse
    		}
    	}
    	xhr.open('GET', 'ajax.php?truc=' + pg, true);
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhr.send(null);
    }
    </script>
    <div id="orange">
    <?
    switch(@$_GET['truc']) {
    case 'lol':
    include'hello.html';
    break;
    case 'lul':
    include'salut.html';
    break;
    default:
    include'silly.html';
    }
    ?>
    </div>


    Et ta page ajax.php
    <?
    switch(@$_GET['truc']) {
    case 'lol':
    include'hello.html';
    break;
    case 'lul':
    include'salut.html';
    break;
    default:
    include'silly.html';
    }
    ?>
    4
  2. Tiller Messages postés 783 Statut Membre 211
     
    ouai normalement, donc dans ton cas:
    <a href="index.php?page=lol" onclick="refresh(lol); return false;">
    1
    1. ajax.include
       
      est ce que je dois enlevé
      else
      	{
      		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
      		xhr = false; 
      	} 
      

      ?
      (lorsque le javascript est désactivé je n'ai pas besoin de ce message)
      0
  3. Tiller Messages postés 783 Statut Membre 211
     
    Si le javascript est désactivé, cela ne prendra pas effet, l'alert se fait lorsque l'utilisateur a un navigateur trop vieux refusant cette méthode
    1
    1. ajax.include
       
      une dernière question
      <?php if ($truc == 'lol') { ?>class="active"<?php } ?>
      


      ne marche plus
      donc je pensais rajouter un ou ( || )
      mais je ne sais pas quoi mettre
      que dois-je vérifier comme variable ?
      (vu que la bar d'adresse ne contient plus index.php?truc=lol)
      avec ton "pg" ça ne fonctionne pas
      comment faire?
      0
    2. Tiller Messages postés 783 Statut Membre 211 > ajax.include
       
      Essai
      <?php if ($_GET['truc'] == 'lol') { ?>class="active"<?php } ?>
      0
    3. ajax.include > Tiller Messages postés 783 Statut Membre
       
      ça marche pas

      il faudrait pouvoir vérifier ta valeur pg (pg = lol en gros)

      ce bout de code se trouve dans l'anchor je précise
      0
    4. ajax.include > ajax.include
       
      If nothing is set in the address bar, the value of $_GET['n'] will be NULL, not ""(empty string) or false.
      ça explique le probleme
      il suffirait de remplacer $_GET par une autre méthode juste pour ajax.php
      0
    5. ajax.include > ajax.include
       
      il faudrait récupérer la valeur de $_get avant quelle devienne null
      l'assigner(set) à une autre variable qu'on vérifie (à la place de truc)
      tu aurais une idée?

      (j'ai vérifié et register_globals est bien on)
      0
  4. ajax.include
     
    euuuh ok (merci!)
    ça utilise la classe xhr non?

    2 questions :

    1)
    un truc du genre
    <a href="index.php?page=lol" onclick="someFunction(); return false;"
    fonctionne lorsque le javascript est désactivé mais je dois remplacer somefunction par quoi dans ton exemple?

    2) ton ajax.php correspond à mon index.php ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ajax.include
     
    oublie la seconde question (je viens de saisir)
    0
  7. ajax.include
     
    ok merci !
    je suis en train de trafiquer pour le faire fonctionner correctement
    histoire de charset et d'accent
    mais je pense je vais m'en sortir ^^
    j'ai rajouté
    header('Content-Type: text/html; charset=ISO-8859-1');

    dans ajax.php
    ça ira?
    0
  8. ajax.include
     
    ptites précisions pour les autres
    tu avais oublié les '
    onclick="refresh('lol'); …
    et avec ce système pas moyen de bookmark et le back/précédent ne marche plus (?)
    0