2010-11-10 17 views
0

J'écris une application Web basée sur cgi. Dans une partie de l'application, vous pouvez gérer une liste d'éléments, et l'une des choses que vous pouvez faire est de déplacer un élément d'un endroit sur la liste.Le navigateur ne chargera pas la page lorsque l'URL cible est la même que la page en cours

Le lien pour le déplacement d'un haut ressemble fondamentalement à l'article ceci:

foo.cgi?action=moveItemUp&itemID=12345 

Mon problème se pose quand il y a un élément que je veux déplacer deux places sur la liste. Je peux passer d'un endroit à l'autre, mais quand je clique sur le lien «remonter» la deuxième fois, le navigateur ne chargera pas la nouvelle page. Rien ne se passe du tout.

Je pense que c'est parce que le navigateur voit que l'URL de la nouvelle page est la même que la page actuelle et suppose donc qu'il n'y a rien à faire.

Je peux contourner cela en changeant le lien dans un bouton de soumission de formulaire, mais je me demandais s'il y avait des solutions plus faciles là-bas.

+0

J'ai fini par convertir le lien en un bouton de soumission de formulaire, qui semble un peu moche mais A) il fonctionne, et B) il est conforme à l'attente HTTP que les requêtes GET ne devraient pas changer les données sur le serveur. –

Répondre

0

Juste informer que cette page ne doit pas être mise en cache.

<html> 
    <head> 
     <meta HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
     <meta HTTP-EQUIV="Expires" CONTENT="-1"> 
    </head> 
    <body> 
     (Content) 
    </body> 
</html> 
1

Vous pourriez avoir le script send the correct headers telling the browser not to cache the page under any circumstances, ou d'ajouter une valeur aléatoire à l'URL:

foo.cgi?action=moveItemUp&itemID=12345&random=23934253094 

l'approche d'en-tête serait le plus propre un.

+0

J'ai essayé d'ajouter les méta en-têtes, mais cela n'avait aucun effet apparent. Lorsque je clique sur le lien "remonter" la deuxième fois, rien ne se passe du tout. Le navigateur n'envoie pas de requête. –

+0

@ John Ahhh, bien sûr, maintenant je comprends - la mise en cache n'est pas du tout le problème ici, le navigateur suppose juste qu'il est déjà sur la bonne page. Pardon. Oui, dans ce cas, une URL aléatoire est la seule façon de procéder. –