Chamadas Ajax para subdomínio

9

Eu tenho um servidor localizado em example.com executando o apache, atendendo meus arquivos estáticos de html.

Eu também tenho um serviço json localizado em api.example.com executando python com cherrypy.

O usuário solicita example.com e obtém a página html de índice. Nessa página eu faço um pedido de ajax com jquery para o serviço json. document.domain retorna example.com

        $.ajax({
        type: 'GET',
        url: 'http://api.example.com/resource/',
        dataType: 'json',
        success: successCallback,
        error: errorHandler
    });

No entanto, não consigo ver o corpo da resposta para a solicitação do ajax no firebug. Isso me leva a acreditar que o navegador (FF) não suporta isso.

Quais são os melhores métodos para conseguir isso? Eu preferiria não usar nenhum proxy no backend do apache para example.com, se possível.

    
por Baversjo 28.06.2010 в 16:18
fonte

5 respostas

4

Você também pode usar JSONP adicionando callback =? até o final do URL. O jQuery já sabe como lidar com esse tipo de solicitações, mas requer algumas alterações no lado do servidor para lidar com o parâmetro de retorno de chamada.

    
por Rob 28.06.2010 / 16:40
fonte
0

O pedido AJAX é suportado apenas no mesmo domínio. No entanto, você pode escrever um proxy http em sua linguagem de script preferida e fazer chamadas para esse proxy http. Você pode conferir este pequeno tutorial em um proxy AJAX escrito em php .

    
por Bogdan Constantinescu 28.06.2010 / 16:26
fonte
0

tente alterar o seu domínio no seu subdomínio, como este

<script type="text/javascript">    
  document.domain = 'example.com';
</script>

se não funcionar, altere o seu documento.domínio na sua página de domínio também.

    
por eos87 28.06.2010 / 16:32
fonte
0

Até onde eu sei, você não pode fazer o domínio cruzado de AJAX.

Por que o Ajax entre domínios é uma preocupação de segurança?

Embora eu possa fazer uma solução alternativa IFRAME

Cross Sub Domain Javascript

    
por SAGExSDX 28.06.2010 / 16:24
fonte
-1

Use document.domain para tornar o domínio o domínio de nível superior em vez do subdomínio.

document.domain="example.com"

Isso é descrito em detalhes no MDN.

    
por Russell Leggett 28.06.2010 / 16:32
fonte