Jump to content

Changer l'url ajax


Recommended Posts

Bonjours

Mon problème est que je n'arrive pas à faire que l'on puisse retrouvé une page spécifique sur le site que je fait. Parce que de la façon que j'ai faite je ne peu que accéder directement que à la page index.

Et ça pose un problème pour un flux rss par exemple.

Donc j'utilise ce code js pour recharger le corps de la page

function ajax(param){
var xhr=getXMLHttpRequest(),
url=(typeof param=='string') ? param : (typeof param.url=='string') ? param.url : false,
params=(typeof param.params=='string') ? param.params : false,
callback=param.callback ? (typeof param.callback=='function') ? param.callback : alert : false,
waiting=(typeof param.waiting=='function') ? param.waiting : false,
xml=(param.xml=='xml') ? true : false,
method=(param.method=='post') ? 'post' : 'get',
asynchrone=(typeof param.asynchrone=='boolean') ? param.asynchrone : true;
if(url){
	if(callback){
		xhr.onreadystatechange=xml?
			function(){
				if(waiting){
					if(xhr.readyState==1){
						waiting();
					}
				}
				if(xhr.readyState==4 && (xhr.status==200 || xhr.status==0)){
					callback(xhr.responseXML);
				}
			}:function(){
				if(waiting){
					if(xhr.readyState==1){
						waiting();
					}
				}
				if(xhr.readyState==4 && (xhr.status==200 || xhr.status==0)){
					callback(xhr.responseText);
				}
			}
	}
	if(method=='post'){
		xhr.open('POST',url,asynchrone);
		xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
		xhr.send(encodeURI(params));
	}else{
		if(/\?([^&]=[^&]&)*[^&]=[^&]$/.test(url)){
			url+='&';
		}else if(!/\?$/.test(url)){
			url+='?';
		}
		xhr.open('GET',url+encodeURI(params),asynchrone);
		xhr.send(null);
	}
}else{
	alert('Il faut au moins une URL !');
}

}

Puis je met dans la balise <a> dans href : "java script:var param={ url:'pages/page1.php', callback:function(txt){document.getElementById('test').innerHTML=txt;} }; ajax(param);"

et donc ça marche très ça recharge seulement la parti de la page désiré qui viens de page1.php entre <div id="test"></div>

puis je rajoute : document.location.replace('page'); pour changer le hash dans l'url

En entier ça donne ça :<a href="java script:var param={ url:'pages/blogbd.php', callback:function(txt){document.getElementById('test').innerHTML=txt;} }; ajax(param); document.location.replace('#page1.html');" >page</a>

Mais le problème c'est que je veux qu'au premier chargement on puisse accéder à n'importe qu'elle page et que par extension que l'on puisse utiliser le bouton de retour en arrière du navigateur sans que ça sorte du site directe.

En faite que chaque page est son url propre.

Bon je suis pas sûr d'avoir été explicite ;)

Merci d'avance et désolé pour les fautes d'orthographes :craint:

Link to comment
Share on other sites

Hello

Est-ce que tu veux dire que tu veux que si on accède directement à mapage.php#page1 il puisse automatiquement accèder à l'index en cliquant sur précédent (même sans y avoir été juste avant ?), ou as-tu besoin plus simplement de la base (gestion des évènements précédent / suivant, affichage direct de la page demandée) ?

Link to comment
Share on other sites

en faite je voudrais surtout que chaque page ai son url propre c'est à dit que si on tape http://monsite.free.fr/#page2 on y accède directement parce que je ne peu que accédé à la page d'index directement.

Il faudrait donc qu'un code js lise le hash donc le truc après dièse et que après que à chaque chargement ça lise le hash puis que ça choisisse la page selon.

Pour faire simple exactement comme ce site http://jiwa.fm/

edit:

Bon j'ai trouver comment pouvoir accerder directement à la page voulu avec ce code js

	var hash = location.hash;
function hashChange(){
	if(location.hash != hash){
		hash = location.hash;
		//Ici, on met ce qui doit être fait (par ex: appeler une fonction) lors de la modification du hash
		if(hash == "#page1")
		{
			var param={ url:'pages/blogbd.php', callback:function(txt){document.getElementById('test').innerHTML=txt;} }; ajax(param);
		}
		if(hash == "#page2")
		{
			var param={ url:'pages/archive.php', callback:function(txt){document.getElementById('test').innerHTML=txt;} }; ajax(param);
		}
	}
}
var check = setInterval(hashChange, 500);
}

Mais bon je ne peu toujours pas faire des retour en arrière :craint:

Et je pense qu'il y a moyen de mettre un fontion à la place de faire plein de if

Link to comment
Share on other sites

C'est sûr que ça serait plus propre avec une fonction :iloveyou:

Alors maintenant il existe des librairies qui te font tout bien comme il faut, et qui ont été testées pendant plusieurs années (en un mot comme en cent : elles marchent bien). Tu peux regarder du coté de SWFAdress par exemple (qui n'est pas réservé au flash comme son nom pourrait le faire croire).

Si tu veux tout faire toi même, pour la gestion des retours arrière tu peux tout simplement appeler une fonction régulièrement (toutes les 1 sec par exemple) qui compare le hash d'il y a une seconde et le hash actuel... et d'agir s'il a changé !

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...