2010-01-05 19 views
3

J'ai une page sur mon site qui demande beaucoup de contenu via AJAX. Le problème que j'ai rencontré est que si vous avez piqué sur le site et êtes sur une page qui n'a pas techniquement d'URL, vous ne pouvez pas copier/coller l'URL et l'envoyer à quelqu'un, puisque vous Je vais finir sur la page d'accueil. Je regardais sur facebook, et ils utilisent une ancre pour une URL qui a été demandée après l'URL d'origine, comme ceci: http://www.facebook.com/#/somepage (si vous étiez sur la page d'accueil et est allé à somepage, et c'est une demande AJAX).Liens vers les URL AJAX

Définition d'une ancre sur l'URL ne serait pas un problème du tout, puisque je l'utilise <a> tags pour tous mes trucs AJAX de toute façon, mais comment pourrais-je être en mesure d'obtenir mysite.come/#/some-ajax-page/ pour fonctionner correctement et afficher ce some-ajax-page devrait être et pas seulement essayer de trouver l'ancre nommée /some-ajax-page/ dans le DOM?

P.S. J'utilise jQuery pour mon côté serveur JS et Django

Répondre

4

Vous pouvez vous référer à l'URL de la page en cours en utilisant l'objet document.location. Ce n'est pas standard, mais néanmoins, tous les navigateurs que je connais le supportent. La propriété hash de cet objet vous donne la partie derrière le signe dièse.

Ainsi, dans votre fonction jquery .ready, vous pouvez sonder document.location.hash (pour votre exemple url http://www.facebook.com/#/somepage qui évaluerait à /somepage), et l'interpréter à faire tout ce qui est nécessaire pour recréer l'état approprié vous page. La logique que vous devez faire ici dépend naturellement de vous - nous ne pouvons pas sentir quels états peuvent avoir vos pages et comment vous voulez les représenter dans le texte d'ancre.

Pour plus d'informations, voir la documentation mozilla de l'objet d'emplacement. AFAIK tous les navigateurs supportent ces propriétés: https://developer.mozilla.org/en/DOM/window.location

+0

Génial! C'est exactement ce que je cherchais ... en quelque sorte juste "lire" ce que l'ancre est en JavaScript. Merci beaucoup! – Zack

-1

Obtenez juste le fragment de l'URL demandée (vous devrez peut-être utiliser request.get_full_path() pour ceci), et puis construisez votre page correctement sur le serveur.

+1

Je ne crois pas que le fragment d'URL puisse être accédé côté serveur (sans l'envoyer délibérément via un appel AJAX) - c'est entièrement côté client. – ceejayoz

1

Découvrez jQuery BBQ. Nous avons utilisé quelque chose de similaire sur un projet récemment, et c'était assez lisse.

L'idée de base est d'écouter les changements dans les fonctions de hachage et d'exécution (c.-à-d. Chercher une nouvelle page via ajax) en se basant sur le hachage.

+0

Cela pourrait bien être ce que je finis par utiliser ... très beau plug-in, je suis en train de lire à ce sujet en ce moment. Merci! :) – Zack

+0

Pas de problème. J'espère que ça aide. – davethegr8

Questions connexes