Bonjour,
Voila je rencontre un petit problème avec mon code sous javascript
Depuis quelque jours, je m'intéresse à l'API History afin de réaliser une navigation dynamique sur mon site via chargement des page via AJAX. Il me fallait donc pouvoir gérer l'historique comme si un site habituel (avec un chargement complet de la page).
$(document).ready(function() {
$(".lien_ajax").live('click', function(event) {
event.preventDefault();
var url = $(this).attr('href');
ajaxLoad(url);
});
function ajaxLoad(url){
$.ajax({
cache: false,
url: url+'?ajax=oui',
success: function(html){
afficher(html);
history.pushState({key : i}, 'titre', url);
},
error: function(XMLHttpRequest,textStatus,errorThrown){
alert(textStatus);
}
});
};
window.onpopstate = function(event){
var urlcourant = document.location.pathname;
alert(event.state);
if(event.state == null){
$.ajax({
url : '/intranet/refonte/index.php',
cache:false,
success:function(html){
afficher(html);
},
error:function(XMLHttpRequest,textStatus, errorThrown){
afficher("erreur lors du chagement de la page");
}
});
}
else{
ajaxLoad(urlcourant);
}
};
function afficher(data){
alert("affiche");
$('.page-container').fadeOut(500, function(){
$('.page-container').empty();
$('.page-container').append(data);
$('.page-container').fadeIn(1000);
});
};
});
Lorsque je clique sur mes liens contenant la classe .lien_ajax le chargement de la page fonctionne correctement : seulement une partie de la page est rechargée, l'URL est bien mise à jour et une nouvelle entrée dans l'historique a été insérée. Le problème n'est pas ici...
Lorsque que je clique sur mon lien, puis je clique sur le bouton précédent, la précédente "page" s'affiche correctement, mais si après je re-clique sur un .lien_ajax le contenu de la page est chargé deux fois.. et cela me créer deux nouvelles entrées de cette nouvelle page dans l'historique. Ce qui pose un problème pour revenir à la précédente page (obligé de cliquer deux fois sur le bouton précédent)
Connaîtrez-vous un moyen de parvenir à ne charger qu'une seule fois le contenu ?
En vous remerciant d'avoir pris du temps pour lire mon post