2008-10-08 20 views
9

En mi página de inicio que tengo:volver a cargar una página a través de AJAX cuando window.location = self.location no funciona

<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> 

Via MooTools, consigo estos elementos de anclaje por id de manera que una vez que se hace clic , aparecerá un div llamativo debajo de ellos que contiene el formulario de inicio de sesión o suscripción (con métodos para detener la propagación de eventos, por supuesto) y al completar los campos de la llamada AJAX, se supone que debe crear una sesión y volver a cargar el página para que el usuario tenga un visual que ya ha iniciado sesión y aparecen controles de nivel de usuario, etc.

La llamada ajax es iniciada La clase AJAX de MooTools y la opción evalScripts están configuradas como verdaderas. La página de AJAX devuelve el código de script:

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

Este sistema funciona perfectamente - ahora me pregunto por qué si cambio href valores de las anclas 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?

Respuesta

20
window.location = self.location; 

este JavaScript se ejecuta.

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 funcionen como usted espera, pero otros lo harán de forma inteligente y compararán los dos valores. El navegador conoce en qué página está, y sabe que solo está pidiendo que vaya a la misma página.

caché del navegador

El navegador tiene incluso una copia de la página actual en la memoria caché . Puede hablar con el servidor y preguntar si la página que tiene en caché todavía es válida. Si la memoria caché es válida, puede decidir no forzar una recarga de la página. Detrás de escena, esto sucede con encabezados HTTP. Los navegadores y servidores se pueden comunicar a través de HTTP de muchas maneras. En este caso, el navegador envía una petición al servidor rápida 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 llama una petición GET condicional . Al decir If-Modified-Since, su navegador dice: "Dame ese archivo, pero solo si se ha modificado desde la última vez que lo vi".

En resumen, no le ha indicado explícitamente al navegador que vuelva a cargar la página.

Así es como se puede:

location.reload(true); 

El "verdadero" es un parámetro opcional, para forzar una recarga. El navegador ni siquiera mirará la caché. Simplemente hará lo que diga.

+0

wow un gurú de JS, muchas gracias por esto te debo una dona y un poco de café :) – lock

+0

¿Qué sucede si quieres establecer una variable de publicación y luego de esto, para actualizar? ¿En otras palabras, cómo realizar la recarga con una variable de publicación modificada? Gracias – artaxerxe

1

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

0

Si me dieran esta tarea en particular en el trabajo, la devolvería al diseño. A menos que hablemos de una página segura o de un inicio de sesión de OpenID, no debe aparecer 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 registrarse si no lo ven.

Cuestiones relacionadas