Pergunta

Eu tenho uma aplicação em que a maioria dos pedidos são submetidos via AJAX, embora alguns são submetidas através de "regulares" HTTP solicitações. Se um pedido for apresentado e a sessão do usuário expirou, a seguinte JSON é retornado:

{"authentication":"required"}

A função JavaScript que apresenta todas as requisições Ajax alças esta resposta, mostrando uma mensagem pop-up e redirecionar as costas do usuário para a página de login.

No entanto, quando um pedido de não-AJAX recebe esta resposta o JSON é simplesmente mostrada no navegador, porque a resposta é processada directamente pelo navegador (isto é, a função JavaScript acima mencionado é ignorada). Obviamente, isso não é ideal e eu gostaria que os pedidos não-Ajax que recebem essa resposta para comportar o mesmo que as solicitações de AJAX. A fim de conseguir isso, eu posso pensar de 2 opções:

  1. Go através da aplicação e converter todos os pedidos para solicitações de AJAX. Isso poderia funcionar, mas também poderia levar um longo tempo!

  2. O JSON mostrado acima é gerado por um muito simples JSP. Eu estou querendo saber se seria possível adicionar um manipulador de eventos JavaScript para este JSP que é executado mesmo antes de conteúdo é exibido no navegador - Estou assumindo isso nunca seria chamado para solicitações de AJAX? Este manipulador pode chamar o outro código JavaScript que exibe o pop-up e executa o redirecionamento.

Se alguém sabe exatamente como eu posso implementar o manipulador eu esbocei em (2), ou tem quaisquer outras soluções possíveis, eu ficaria muito grato se eles passá-los.

Cheers, Don

Foi útil?

Solução

Você não pode adicionar um manipulador para o JSP dessa forma. Qualquer coisa que você adicionar a ele irá torná-lo uma página não produtores de JSON.

Existem duas opções que eu posso ver: Adicionar um parâmetro para a página anexando um parâmetro de URL para a tela que modifica a saída.

URL: http:? //Domain/page.jsp ajaxRequest = true Será que json saída somente

URL: http: //domain/page.jsp exibiria uma página jsp que poderia avançar para uma outra página.

ou

mudar a resposta para ter o código de encaminhamento na JSP que serão executados pelo navegador da web se ele é atingido diretamente. Então, o seu chamando AJAX para retirar o código de encaminhamento, e em seguida, processar o que está à esquerda.

Outras dicas

3) Alterar o código AJAX para adicionar uma variável para o GET ou POST: outputJson=1

4) Leia-se sobre o pedido 'Aceitar' cabeçalho HTTP.

Em seguida, na medida do lado do servidor a saída:

por exemplo.

if(Accept contains application/json...) { // client asking for json, likely  to be XHR
  return {"foo":"bar"}
} else { // other
  return "Location: /login-please";
}

Comece com uma mensagem de erro mais inteligente, como este:

{"error":"authentication required"}

Enrole a saída de JSON em um callback:

errorHandler({"error":"authentication required"});

Tenha um manipulador de espera no seu script:

function errorHandler(r) {
   alert(r.error);
}

E não se esqueça de enviá-lo para baixo como text/javascript e não application/x-json.

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