2011-05-13 4 views
0

Je fais une application en utilisant Django anf python. Ma page Web a des parties. Les parties de gauche sont pour la navigation en utilisant ajax qui apporte des données à la droite. En cliquant sur le côté droit il conduit aux différentes URL.comment résoudre ce problème particulier?

Mes bagouts url sont:

foo.com/main/ 
foo.com/main/a/ 
foo.com/main/a/b/ 
foo.com/main/a/b/c/ 

Chaque fois que je clique sur le côté droit, il fait un appel ajax pour apporter des données. Mais l'URL reste la même que la précédente. Donc, j'ai décidé d'utiliser # !.

Mais mon problème est: Supposons que je suis sur l'URL foo.com/main/a/b/ Mais après l'appel ajax Je veux l'URL à foo.com/main/#!/1/ Alors, que jamais la page que je suis si je faisais un ajax appeler l'URL doit être

foo.com/main/#!/1/ 

Est-ce possible? Comment?

Merci

+0

Vous pouvez également abandonner les hashbangs et utiliser 'history.pushState()' (http://diveintohtml5.org/history.html#illusion), il reviendra à un comportement normal non-ajax pour les anciens navigateurs. – Tony

Répondre

0

AJAX ne va pas changer l'URL, car il ne provoque pas un rechargement de la page (qui est le point d'utiliser AJAX). Vous pouvez changer l'URL à l'aide de window.location.href, mais cela entraînera une tentative d'accès du navigateur à partir de l'URL spécifiée. J'ai regardé vers le haut et il y a quelques indications que certains navigateurs te permettent de changer l'URL dans la barre d'adresse sans recharger la page mais je ne compterais pas sur cette fonctionnalité. (c.-à-d. s'il existe, il est très dangereux (spoofing, hameçonnage) et sera probablement désactivé ou altéré)

0

Ceci est bien plus une question ajax qu'une question Django, mais ça va. Vous voulez qu'il y ait un mappage entre vos URLs hash-bang (#!) Dans la partie client de votre code, et les URL définies sur le côté Django.

Je vous recommande de chercher un framework Ajax qui vous aidera dans cette tâche. Les populaires incluent Sammy.js, Spine.js, et (ma préférence) Backbone.js. Ils vous aident à définir un mappage régulier entre les URL de hachage côté client et les URL principales qui accèdent aux données via Ajax. J'aime Backbone car il est très précis dans ses relations entre les datasets provenant du serveur, leurs URLs d'accès (l'URL que vous utilisez pour faire des appels Ajax), leurs URLs d'affichage (l'URL hash-bang montrée sur la page), et définissant un méthode par élément de données pour la traduction entre les deux URL.

+0

Pouvez-vous aller plus profond .. J'ai lu le sammy.js mais je ne pouvais pas trouver le moyen de résoudre mon problème .. – silimer

0

Vous devrez peut-être faire ce que des sites comme google maps utilisent pour activer la liaison aux pages riches en ajax. Ils ont un "permalink" qui a tous les paramètres dans l'URL. Ensuite, si un utilisateur va plus tard à ce lien, le serveur sait comment configurer la page. Découvrez comment Google Maps le fait pour plus d'informations. L'URL du document tel qu'il apparaît dans la fenêtre du navigateur ne change pas. Si c'est assez bon pour google, alors c'est assez bon pour le reste d'entre nous.

Questions connexes