11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous
J'ai un petit problème le voici

J'ai un fichier index5.php qui fait les include suivant head, header, menu contenant et footer

index5.php

	include('includes/head.php');
	include('includes/header.php');
	include('includes/menu.php');
	
	$d="includes/";
	$a="accueil";
	$b=".php";
	$e="error";
	$p=strtolower($_GET['p']);
	
	if(isset($_GET['p'])){
		$p=strtolower($_GET['p']);
		if(preg_match("/^[a-zA-Z0-9\-]+$/",$p) && file_exists($d.$p.$b)){
			include $d.$p.$b;
		}
	}
	else if(isset($_GET['p']) == ""){
		include $d.$a.".php";
	}

	include('includes/footer.php');


navigation.js

$(document).ready(function(){
	$("#menu a").click(function(){
		var lien = $(this).attr("href");
		var page=lien.substring(lien.lastIndexOf("=")+1);
		$.ajax({
			url:"/includes/"+page+".php",
			cache:false,
			success:function(html){
				liens=page,
				afficher(html);
			},
			error:function(XMLHttpRequest,textStatus,errorThrown){
				alert(textStatus);
			}
		})
		return false;
	});
});

function afficher(data){
	$("#contenant").fadeOut(500,function(){
		$("#contenant").empty();
		$("#contenant").append(data);
		$("#contenant").fadeIn(500);
		location.href = liens;
	})
}


.htaccess

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^([a-zA-Z0-9\-]+)$ /includes/$1\.php


Alors de cette façon il me donne mon mon lien dans la barre d'adresse mais efface toute ma page et m'affiche seulement la div contenant mais avant d'effacer ma page je vois qu'il charge comme il se doit mon div contenant et la la recharge sans rien d'autre que ma div contenant

Si j'enlève la lignelocation.href = liens; dans le fichier navigation.js la il m'affiche mon contant très bien dans ma page sauf que dans ma barre d'adresse rien ne change

Si je change dans mon fichier .htaccess la ligne RewriteRule ^([a-zA-Z0-9\-]+)$ /includes/$1\.php pour RewriteRule ^([a-zA-Z0-9\-]+)$ index5.php/includes/$1\.php et que je laisse la ligne location.href = liens; dans mon fichier navigation.js la il change ma barre de navigation pour ce que je demande mais il me fait bien le div contenant et par la suite me recharge la page d'accueil

Ce que je veut c'est que ma div contenant change pour ce que je demande dans mon menu et que mon url m'indique la page demander car je ne vuet pas de barre d'adresse http://www.monsiteweb.com?p=photo je préfère avoir http://www.monsiteweb.com/page/photo

Cela fait quelque jours que je cherche mais la je sais plus quoi faire

Merci de votre aide
Modifié par Integrateur (09 Mar 2010 - 21:17)
Hello et bienvenue,

tu as une erreur dans le php :
else if(isset($_GET['p']) == ""){ 
Plus généralement il y a une erreur de conception : à mon humble avis Ajax ne devrait pas servir à naviguer dans un site (cf. Comment BIEN utiliser Ajax) mais si on décide pour une raison ou pour une autre de le faire pourquoi s'embêter à reproduire le fonctionnement d'un site sans Ajax (url au survol d'un lien) ?
Comme tu fais en sorte d'intercepter les liens les règles du .htaccess ne seront jamais utilisées puisque ton Ajax (d'après ce que j'en comprends) sert justement à ne recharger que le contenu sans recharger la page... d'où la confusion puisque tu fais un location.href

En clair il faudrait revoir le fonctionnement de tout cela... et pourquoi pas : oublier ajax pour un temps. Smiley cligne
Modifié par Heyoan (09 Mar 2010 - 20:46)
Tu serais plus prêt du but avec :
$(function() { 
    $("#menu a").click(function(){ 
        var lien = $(this).attr("href"); 
        var page=lien.substring(lien.lastIndexOf("=")+1); 
        $.ajax({ 
            url:"includes/"+page+".php", 
            cache:false,
			type: "GET",
			dataType: "html",  
            success:function(data){
				//$('#contenant').html(data);
				$("#contenant").fadeOut(500,function(){ 
					$("#contenant").empty(); 
					$("#contenant").append(data); 
					$("#contenant").fadeIn(500);
				})
            }
        }); 
        return false; 
    }); 
}); 
merci mais ce que je cherche à faire c'est de faire affiche dans la barre d'adresse la bonne url pour savoir exactement ou nous somme dans le site et pour pouvoir le mettre en signet et y revenir directement
Integrateur a écrit :
merci mais ce que je cherche à faire c'est de faire affiche dans la barre d'adresse la bonne url pour savoir exactement ou nous somme dans le site et pour pouvoir le mettre en signet et y revenir directement
Alors je me répète : c'est l'inconvénient d'utiliser Ajax puisque seule la div #contenant est modifiée mais que la page n'est pas rechargée... et donc que l'url n'est pas modifiée. Smiley murf
Modifié par Heyoan (09 Mar 2010 - 21:42)
C'est possible via des ancres et en utilisant par exemple jQuery Adress.
La même chose existe pour Flash ou pour des requêtes Ajax qui ne sont pas exécutées via un framework : SWFAdress


Par contre, je n'ai jamais testé ces solutions.