2

Tenho um código que redireciona uma requisição AJAX e ela funciona normalmente em localhost, porém no servidor de hospedagem cross-browser a requisição não é redirecionado.

header('Location: http://dominio.com/endereco'); exit; 

Bloquear redirecionamento de requisições AJAX é algo padrão?

Existe algum código pra habilitar tal redirecionamento?

Pode conter erro no meu código?

Eu faço a requisição utilizando jQuery.ajax:

$.ajax({ url: "http://dominio.com/controller/action", data:dados, dataType: "json", success: Sucesso, error: Erro }) 
7
  • São diferentes domínios, onde esta executando o ajax e o domínio do redirecionamento? Commented 14/03/2016 às 21:32
  • porque vc não usa JS pra redireciona, location.href ='http://dominio.com/endereco' Commented 14/03/2016 às 21:46
  • Faça o PHP retornar por JSON ou o valor da URL apenas para que seja redicionado o link do lado do cliente Commented 14/03/2016 às 22:12
  • São sub-domínios diferentes, exemplo: http://api.dominio.com e http://teste.api.dominio.com Commented 14/03/2016 às 22:26
  • Não posso fazer o redirecionamento via Javascript, porquê estou construindo uma API, e esse redirecionamento faz parte da regra da API e não do consumidor dela. Commented 14/03/2016 às 22:28

1 Resposta 1

1

Você precisa habilitar no seu servidor que será acessado por um domínio externo a permissão para que o domínio externo o acesse. Considerando http://api.dominio.com como seu domínio principal, e http://teste.api.dominio.com como seu domínio "externo", no index.php de http://api.dominio.com você vai ter:

header("Access-Control-Allow-Origin: http://teste.api.dominio.com"); 

permitindo assim que http://teste.api.dominio.com execute seu request Ajax.

Seu servidor principal (http://api.dominio.com) precisa também retornar dados em formato JSONP, que é a extensão do formato JSON para permitir o Cross-domain request. E no seu script Ajax utilize JSONP como a extensão esperada:

$.ajax({ url: "http://dominio.com/controller/action", data:dados, dataType: "jsonp", success: Sucesso, error: Erro }); 
3
  • O Allow-Origin já está presente no ´codigo, por que o redirecionamento funcionaria com jsonp e não com json? Commented 16/03/2016 às 11:47
  • @kaduamaral talvez eu tenha entendido errado sua pergunta. Entedi que você está tentando pegar dados de um servidor A invocando $.ajax() em um servidor B. Commented 16/03/2016 às 20:45
  • Em teoria é isso, e estou conseguindo. O problema é quando tento redirecionar a requisição, como por exemplo quando a autenticação do usuário falha. Pelo que testei e pesquisei acho que isso não é possível, parece que o próprio browser interrompe a requisição quando recebe o cabeçalho de redirecionamento... :/ Commented 16/03/2016 às 22:37

Você deve fazer log-in para responder a esta pergunta.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.