Domanda

Sulla mia homepage ho ricevuto:

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

Tramite MooTools, ottengo questi elementi di ancoraggio per id in modo che una volta cliccato, un div appariscente si aprirà sotto di essi che contenga il modulo di accesso o di iscrizione (con metodi per interrompere la propagazione degli eventi ovviamente) e al momento della compilazione dei campi entra in gioco la chiamata AJAX - si suppone che crei una sessione e ricarichi la pagina in modo che l'utente abbia una visuale che ora è loggato e compaiano controlli a livello di utente ecc.

La chiamata ajax è iniziata dalla classe AJAX MooTools e l'opzione evalScripts è impostata su true. La pagina AJAX restituisce il codice dello script:

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

Questo sistema funziona perfettamente - ora mi chiedo perché se cambio i valori href delle ancore in href = " # " i miei script non funzioneranno più?

Ha qualcosa a che fare con la finestra?

Ha cambiato la sua proprietà quando ho fatto clic su un collegamento o giù di lì anche quando la propagazione dell'evento è stata interrotta ??

È stato utile?

Soluzione

window.location = self.location;

Questo javascript è in esecuzione .

Quando viene eseguito, viene chiesto al browser di sostituire il valore di window.location con un nuovo valore. Non tutti i browser reagiranno allo stesso modo qui. Alcuni probabilmente funzioneranno come previsto, ma altri diventeranno intelligenti e confronteranno i due valori. Il browser sa su quale pagina si trova e sa che lo stai semplicemente chiedendo di andare alla stessa pagina.

Cache del browser

Il browser ha anche una copia della tua pagina corrente nella cache . Può parlare con il server e chiedere se la pagina che ha nella cache è ancora valida. Se la cache è valida, potrebbe decidere di non forzare un ricaricamento della pagina. Dietro le quinte, questo accade con le intestazioni HTTP. Browser e server possono comunicare su HTTP in molti modi. In questo caso, il tuo browser invia una rapida richiesta al server dicendo qualcosa del genere:

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

Questa è chiamata richiesta GET condizionale . Dicendo If-Modified-Since , il tuo browser sta dicendo " Dammi quel file, ma solo se è stato modificato dall'ultima volta che l'ho visto. & Quot;

Per farla breve, non hai detto esplicitamente al browser di ricaricare la pagina.

Ecco come puoi:

location.reload( true );

Il " true " è un parametro opzionale , per forzare una ricarica . Il browser non guarderà nemmeno la cache .. Farà solo come dici tu.

Altri suggerimenti

Andare a un'ancora su una pagina - che è ciò che significa # - non richiede un ricaricamento.

Se mi avessero affidato questo particolare compito al lavoro, lo avrei restituito al design. A meno che non si tratti di una pagina protetta o di un accesso OpenID, non è necessario visualizzare un modulo di accesso o di accesso. Gli utenti devono imparare a cercare quel https: nella parte superiore della loro pagina e non accedere mai se non lo vedono.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top