Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

NunoDinis

window.history.back()

Mensagens Recomendadas

NunoDinis

Boa tarde,

Quando utilizo o método window.history.back() para voltar atrás e o formulário ficar com a mesma pesquisa, pede-me submissão do formulário. O que devo fazer para contornar o problema ?

Obrigado.


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

E não há volta de contornar ? Li, e parece que funciona..

O objetivo é retroceder e ficar com a pesquisa que foi feita anteriormente. Ao carregar o index (que é onde efetuo a pesquisa), depois de carregar no botão voltar da outra página será que dá para submeter logo o formulário ? Penso que possa ser uma solução..


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

A outra forma de lidar com isso é redireccionando o utilizador no fim da página que recebe o POST executar.

Como assim ?

Se estás a fazer uma pesquisa, talvez fosse melhor usar GET.

Queria evitar usar GET, porque caso seja pesquisa-avançada são cerca de 200 filtros..


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Assim que os dados do POST forem tratados, redireccionas o utilizador para que caso ele volte atrás não lide com o browser a pedir o reenvio dos dados.

Usar o GET é a melhor prática, aliás, como pretendes por exemplo partilhar uma pesquisa sem um url?

Os filtros podem ser bem pensados de forma a não tornar o url gigante.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Assim que os dados do POST forem tratados, redireccionas o utilizador para que caso ele volte atrás não lide com o browser a pedir o reenvio dos dados.

E como posso fazer isso ?


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Pronto, já estive a ler a documentação, e de uma coisa já sei: o header tem que ser posto no index.php. Agora a minha questão é, como é que eu temos que proceder para não lidar com o browser a pedir nova submissão ?


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Não, não é isso.

A função header() serve para enviar informações para o cabeçalho do documento, tais como content-types, charsets, redirects, ..

A ideia de usar o header com o redirect é para, mal o formulário seja processado, o utilizador ser redireccionado para uma página "nova" e assim ultrapassar o problema do history.back e reenvio dos dados do formulário. Como o pedido é redireccionado do lado do servidor, aquilo que o browser regista é o avanço da 1ª página para a 3ª, saltando a 2ª.

Isto é super simples de entender, eu é que posso não estar a explicar bem.

Posto isto, o header não tem de vir no index, tem de vir logo após o processamento do formulário. Como não deste código nenhum, não dá para fazer muito mais, mas há-de ser algo assim :

<?php
# processa a pesquisa
if ($_POST)
{

# .. e no final
header('Location: index.php');
}

Nota que o index.php é uma página, deves trocar pela página em que o utilizador vê os resultados da pesquisa que fez.

Mais uma vez, usa GET em vez de POST, ou vai dar mais trabalho.

Editado por yoda

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Isto é super simples de entender, eu é que posso não estar a explicar bem.

Um bocado.. mas eu também estou a ser um bocadinho lento. Prefiro esmiuçar para ficar a perceber do que conseguir fazer e não perceber aquilo que fiz. E agradeço a tua disponibilidade.

Nota que o index.php é uma página, deves trocar pela página em que o utilizador vê os resultados da pesquisa que fez.

A minha pesquisa é processada e mostrada no index. Devo então processar a pesquisa no index e mostrar noutra página ?


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Ok, vou fazer então.

Casos os filtros sejam muitos, qual a melhor solução para a URL não se tornar enorme ?


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lsoares

estive a ler e reforço o que foi dito...

Os métodos HTTP: POST, GET e DELETE..... devem ser usados de acordo com as operações de negócio a que dizem respeito.. (Get para obter informação, Post para enviar informação).

Quanto ao tamanho do URL.... sim é algo que podes tentar simplificar... mas repara que estamos a falar na ordem dos 2 mil caracteres...

http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url

e isso é no IE.. porque nos outros é mais.

Ainda assim .... repito... isso não é desculpa para tentar "limpar" o URL...

desses 200 filtros devias enviar apenas aqueles que foram alterados...

Editado por lsoares

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.