É possível manter (sem recarregar) AJAX página de estado em toda a VOLTA cliques de botão?

StackOverflow https://stackoverflow.com/questions/34227

  •  09-06-2019
  •  | 
  •  

Pergunta

Eu estou familiarizado com várias abordagens para fazer o botão voltar do trabalho em aplicações AJAX em várias situações, mas eu não encontrei uma solução que irá funcionar normalmente no meu cenário específico.

As páginas que eu estou trabalhando com a interface de busca para um site.Você insira os termos normais em um caixa de pesquisa, clique em "ir e acabar em uma página de resultados de pesquisa.Na página resultados da pesquisa, há uma tonelada de controles de INTERFACE do usuário para filtrar/classificar os resultados de pesquisa para encontrar o que você está procurando.Algumas das operações acionadas por estes controles podem levar um (relativamente) muito tempo para concluir (por exemplo,vários segundos).

Esta latência é muito bem no caso em que o usuário é, inicialmente, de filtragem e de classificação seus resultados...há um bom AJAX giratório e assim por diante...no entanto, quando o usuário clica em um resultado de pesquisa e, em seguida, clica no botão VOLTAR, gostaria que a página instantaneamente ser restaurada para o estado em que estava quando clicou.

Eu posso restaurar os estados uso de IFRAMEs/identificadores de fragmento como um dicionário de história da página, mas o que acaba acontecendo é que, quando o usuário atinge o botão voltar a página inicial é carregado, em seguida, ele (re) faz com que o AJAX consulta para obter a página de estado para trás, o que dispara o AJAX giratório e outro espera de possíveis vários segundos.

Existe alguma abordagem que não requerem este tipo de dois estágios de carga de página quando o usuário retorna para a página através do botão VOLTAR?

Editado para acrescentar:Eu sou parcial para a jquery, mas eu ficaria feliz com soluções que dependem de outras bibliotecas/toolkits ou que são autônomos/raw javascript.

Editado para acrescentar:Eu deveria ter acrescentado que estou tentando evitar os cookies, sessões, porque isso impede as pessoas de ter vários brower janelas/abas abertas e manipulação de diferentes conjuntos de resultados de pesquisa ao mesmo tempo.

Editar:Matt, você pode elaborar sua proposta de solução (ativação de uma página de evento de alteração de via fragmento identifer)?Eu vejo como isso ajudaria com cliques de botão em uma mesma página, mas não VOLTA para a página de resultados da pesquisa depois de clicar em um resultado específico.

Foi útil?

Solução

Tente usar localStorage objecto.Aqui é crossbrower libs jStorage e WEBSHIMS json-armazenamento

Outras dicas

Basta usar um cookie.

Você já investigou a YUI Histórico do Browser Manager?

Seria ele ajuda a desencadear uma mudança de página de evento usando a opção "Adicionar algumas informações para o # no final da URL de abordagem".

Dessa forma, clicando no botão voltar não deve, na verdade, mudar a página, e você deve ser capaz de restaurar o estado sem o primeiro carregamento da página.

Usar algo persistente que está associada ao perfil do usuário.

Cookies e sessões são boas ideias, mas você também pode manter essas coisas no banco de dados.Que lhe dá uma vantagem adicional de ser capaz de salvar o usuário preferências de filtragem através de diferentes sessão de navegação.(se, por exampple, ele estava olhando para algo no office e, em seguida, decidiu continuar a procurar quando ele está de volta em casa).

Tudo depende da complexidade dos filtros e o tempo ou não é algo que você acha que o usuário vai querer usar através de diferentes sessões de navegação..

Editado para acrescentar:Eu deveria ter acrescentado que Estou tentando evitar os cookies e sessões porque isso impede as pessoas de ter vários brower janelas/abas abertas e a manipulação de diferentes conjuntos de pesquisa resultados ao mesmo tempo.

Você pode criar um token aleatório e o atribuir o identificador do fragmento.

  • na primeira página de carga criar um token de se nenhum identificador de fragmento é definido
  • antes de navegar para fora, armazenar todos os temporário ajax dados em um cookie com que o token como índice.
  • ao bater de volta, se você tiver um identificador de fragmento conjunto, carregar os dados do token correspondente no cookie.
  • você pode até mesmo adicionar um campo "time" para expirar tokens, etc...

exemplo de cookie (JSON):

{"ajaxcache":[{"token":<token>,"time":<time>,"data":<data>}, ... ]}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top