Pregunta

En mi página de inicio tengo:

<ul id="login">
  <li> <a id="loginswitch" href="./login-page">log-in</a> | </li>
  <li> <a id="signupswitch" href="./signup-page">sign-up</a> </li>
</ul>

A través de MooTools, obtengo estos elementos de anclaje por identificación para que, una vez que se haga clic en ellos, aparezca un div llamativo debajo de ellos que contiene el formulario de inicio de sesión o registro (con métodos para detener la propagación de eventos, por supuesto) y al rellenar los campos, se activa la llamada AJAX: se supone que crea una sesión y vuelve a cargar la página para que el usuario tenga una imagen de que ahora ha iniciado sesión y aparecen los controles de nivel de usuario, etc.

La llamada ajax es iniciada por la clase AJAX de MooTools y la opción evalScripts se establece en true. La página AJAX devuelve el código del script:

<script type="text/javascript">window.location = self.location;</script>

Este sistema funciona perfectamente. Ahora me pregunto por qué si cambio los valores de href de los anclajes a href = " # " mis scripts no funcionarán más?

¿Tiene algo que ver con la ventana?

¿Cambió su propiedad cuando hice clic en un enlace o incluso cuando se detuvo la propagación del evento?

¿Fue útil?

Solución

window.location = self.location;

Este javascript se está ejecutando .

Cuando se ejecuta, se le indica al navegador que reemplace el valor de window.location con un nuevo valor. No todos los navegadores reaccionarán de la misma manera aquí. Algunos probablemente funcionarán como usted espera, pero otros se pondrán inteligentes al respecto y compararán los dos valores. El navegador sabe en qué página está, y sabe que solo estás pidiendo que vaya a la misma página.

Caché del navegador

El navegador incluso tiene una copia de su página actual en caché . Puede comunicarse con el servidor y preguntar si la página que tiene en la memoria caché sigue siendo válida. Si el caché es válido, puede decidir no forzar una recarga de la página. Detrás de escena, esto sucede con los encabezados HTTP. Los navegadores y servidores pueden comunicarse a través de HTTP de muchas maneras. En este caso, su navegador envía una solicitud rápida al servidor diciendo algo como esto:

GET /stackoverflow.com/posts/196643/index.html
HTTP/1.1
Host: www.stackoverflow.com
User-Agent: Mozilla/5.0
If-Modified-Since: Sun, 12 Oct 2008 20:41:31 GMT

Esto se denomina solicitud GET condicional . Al decir If-Modified-Since , su navegador está diciendo, " Dame ese archivo, pero solo si se ha modificado desde la última vez que lo vi. & Quot;

En pocas palabras, no le has dicho explícitamente al navegador que vuelva a cargar la página.

Así es como puedes:

location.reload( true );

El " verdadero " es un parámetro opcional , para forzar una recarga . El navegador ni siquiera mira el caché ... Solo hará lo que usted dice.

Otros consejos

Ir a un ancla en una página, que es lo que significa # , no requiere una recarga.

Si me entregaran esta tarea particular en el trabajo, me gustaría que la diseñara. A menos que estemos hablando de una página segura o un inicio de sesión de OpenID, no debe abrir un formulario de inicio de sesión o de inicio de sesión. Los usuarios deben aprender a buscar ese https: en la parte superior de su página, y nunca iniciar sesión si no lo ven.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top