Pergunta

Na minha página inicial, recebi:

<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, eu recebo esses elementos de âncora por ID para que, uma vez que eles clicados, uma div de maneira chamativa apareça abaixo deles que contém o formulário de login ou inscrição (com métodos para interromper a propagação de eventos, é claro) e, ao preencher o Fields A chamada do Ajax entra em ação-que deveria criar uma sessão e recarregar a página para que o usuário tenha um visual de que ele agora está conectado e os controlos de nível de usuário aparecem etc.

A chamada do Ajax é iniciada pela classe Mootools Ajax e evalScripts a opção está definida como true. A página do Ajax retorna o código do script:

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

Este sistema funciona perfeitamente - agora estou me perguntando por que se eu mudar as âncoras ' href valores para href="#" Meus scripts não funcionam mais?

Tem algo a ver com a janela?

Ele mudou sua propriedade quando cliquei em um link ou mais, mesmo quando a propagação do evento foi interrompida?

Foi útil?

Solução

window.location = self.location;

Este javascript está executando.

Quando ele é executado, o navegador está sendo instruído a substituir o valor da janela.Location por um novo valor. Nem todos os navegadores reagirá da mesma maneira aqui. Alguns provavelmente funcionarão como você espera, mas outros ficarão inteligentes e compararão os dois valores. O navegador sabe Em que página está, e sabe que você está apenas pedindo para ir para a mesma página.

Cache do navegador

O navegador ainda tem uma cópia da sua página atual em cache. Ele pode conversar com o servidor e perguntar se a página que possui no cache ainda é válida. Se o cache for válido, pode decidir não forçar uma recarga da página. Nos bastidores, isso acontece com os cabeçalhos HTTP. Navegadores e servidores podem se comunicar sobre o HTTP de várias maneiras. Nesse caso, seu navegador envia uma solicitação rápida ao servidor dizendo algo assim:

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

Isso é chamado de solicitação condicional de obter. Dizendo Se modificado-uma vez, seu navegador está dizendo: "Dê -me esse arquivo, mas apenas se tiver sido modificado desde a última vez que o vi".

Para encurtar a história, você não disse explicitamente ao navegador para recarregar a página.

Veja como você pode:

location.reload( true );

O "verdadeiro" é um parâmetro opcional, por forçando uma recarga. O navegador nem sequer olha para o cache. Isso fará o que você diz.

Outras dicas

Indo para uma âncora em uma página - que é o que # significa - não requer uma recarga.

Se eles me entregassem essa tarefa específica no trabalho, eu o chutaria de volta ao design. A menos que estejamos falando de uma página segura ou de um login OpenID, você não deve exibir um formulário de login ou login. Os usuários precisam aprender a procurar isso HTTPS: na parte superior da página e nunca se inscreva se não a virem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top