Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Felipe Rex

Ajax - URL com redirect

Recommended Posts

Estou usando ajax para executar uma página que dentro dela tem redirects em javascripts, porém percebo que esses redirects não estão sendo feitos quando chamo a página via ajax. O ajax não roda redirect nas páginas disparadas?

 

 

Exemplo:

 

    $.ajax({
        url: 'paginaComRedirectDentro.php',
        type: "GET",
        dataType: "html",
        success: function(data) {
                alert('OK RODOU');
        }
    });

Na página paginaComRedirectDentro.php, existe redirects javascripts.

 

Eu preciso rodar o ajax para chamar a paginaComRedirectDentro.php e nesta chamada rodar a página e todos os redirects que tem dentro dela.

 

Vamos supor que o código da paginaComRedirectDentro.php seja o seguinte:

 

paginaComRedirectDentro.php

/* Atualiza registro */

//codigo aqui para atualizar registro

//redirect para atualizar registro 2
<script type="text/javascript">
<!--
window.location = "paginaComRedirectDentro.php?atualizarRegistro=2"
//-->
</script>

Esse é um exemplo apenas, vamos supor que eu queira executar a paginaComRedirectDentro.php via ajax para atualizar o banco de dados e dentro dela tem um redirect, este redirect não é executado.

 

 

Tem alguma forma de fazer o redirect funcionar dentro da chamada ajax?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marlon: Como assim? Precisa colocar algum argumento retornado pelo resposta do ajax no window.location?

 

É assim?

  $.ajax({
        url: 'paginaComRedirectDentro.php',
        type: "GET",
        dataType: "html",
        success: function(data) {
window.location
        }
    });

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, eu tinha entendido errado.

Veja bem, qual o motivo de ter um redirect para a mesma página? Você não pode passar esse parâmetro direto pra ela?

Senão você pode fazer o seguinte.

Na paginaComRedirectDentro.php coloque um:

echo "paginaComRedirectDentro.php?atualizarRegistro=2";

E no retorno do ajax:

  $.ajax({
        url: 'paginaComRedirectDentro.php',
        type: "GET",
        dataType: "html",
        success: function(data) {
window.location = data;
        }
    });

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marlon, dessa forma haverá redirect na página sendo visualizada pelo usuário e não é isso que desejo. O desejo é que ocorra o redirect "invisível" via ajax.

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza. Pq o redirect ??

Você já está passando parâmetros para uma página? Pq um redirect com outro parâmetro ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por vários motivos Marlon.

É um sistema de atualização automática de registros no banco de dados.

Quando user acessa uma página do site, executa via ajax uma outra página (no exemplo aqui citado seria a paginaComRedirectDentro.php) que faz automaticamente atualização de vários registros no banco de dados, mas não de uma só vez e sim 1 por vez, por isso necessita do redirect.


Caso de uso para entender:
1 - página é carregada via ajax
2 - obtém registro a ser atualizado
3 - atualiza registro obtido com dezenas de processos
4 - faz redirect para o passo 2 verificando se há registros ainda para ser atualizado
4.1 se tiver, faz atualização passando pelo passo 3 e assim sucessivamente até completar a atualização.


Não tente entender o porque preciso de um redirect dentro da página.

O ponto em questão é por que se eu executar a página paginaComRedirectDentro.php digitando no broser, realiza o redirect perfeitamente, porém se eu chamar essa mesma página via um request ajax, não realiza o redirect.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, eu estava querendo entender justamente porque não há um sentido prático para fazer isso. Todas essas verificações poderiam ser feitas diretamente pelo PHP.

Ajax faz requisições que esperam um retorno. Esse retorno deve ser tratado, não há como fazer um redirect em um retorno de dados.

A única coisa que eu vejo que funcionaria é fazer uma nova chamada ajax no sucess com o parâmetro passado no redirect, algo tipo:

$.ajax({
  url: 'paginaComRedirectDentro.php',
  type: "GET",
  dataType: "html",
  success: function(data) {
    $.ajax({
      url: 'paginaComRedirectDentro.php',
      type: "GET",
      data: "atualizarRegistro=2",
      success: function(data) {
        alert('OK');
      }
    });
  }
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

Discordo que ajax precisa ter um retorno. Há diferentes tipos de aplicações que usam ajax sem retorno de dados, como é o meu caso. Em fim...

 

Eu pensei nessa solução que você mencionou, de chamar um ajax dentro de outro. Porém, o número de redirect não é padrão, pode variar. Para usar esse tipo de solução eu teria que saber exatamente quantos redirects eu usaria. No exemplo que voce mostrou por exemplo, seria no máximo 1 redirect. E se eu tive 3 redirects?...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não quis me referir à retorno de dados, mas a um código de retorno. o redirect que você está utilizando é client side.

Talvez dê pra pensar em algo para o php, tipo:

header("Location: ./paginaComRedirectDentro?atualizarRegistro=2");

Se isso não rolar, aí não consigo pensar em algo que não acabe virando uma gambiarra sem tamanho.

'Mals ae'


Ou ainda um:

exec ('php /diretorio/arquivo.php parametro');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marlon, vou mudar a regra de negócio e fazer de outro jeito. Não consegui ver uma solução, tentei usar header() php ao invés de redirect js, mas sem sucesso.

 

Vou mudar algumas coisas e dará certo (embora não fosse a solução que eu queria). Mas como gosto de programar usando clean code, vou mudar as coisas para manter o código limpo.

 

 

Obrigado pela ajuda oferecida!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.