Pergunta

Eu entendo (acho) que os objetos xmlHttPrequest aderem à política do "mesmo domínio". No entanto, quero criar um arquivo HTML local simples (POC) que baixe XML de um servidor da Web e faça algo com ele (vamos começar com um simples "alert ()").

É possível de alguma forma? Preciso de uma opção especial de configuração do Firefox?

O servidor do qual estou tentando baixar é não Sob o meu controle (na verdade é uma API do Google).

Minha tentativa simples é o código de Página "usando xmlhttprequest" de Mozilla. Ele retorna um erro que eu realmente não entendo do método "Send".

Isenção de responsabilidade: sou principalmente um desenvolvedor C/C ++ - nunca fiz nenhuma programação JS grave, nunca tentei usar essas APIs.

Foi útil?

Solução

O XMLHTTPRequest realmente adere a uma implementação muito mais rigorosa da mesma política de domínio: embora você possa definir a propriedade Document.Domain para permitir que o JavaScript seja servido de dois subdomínios para conversar um com o outro, você não pode fazer isso com xmlHttPrequestObject. No seu caso, indo para um domínio completamente diferente, você também não poderia fazer isso com JavaScript.

Há um par de opções. Primeiro, você pode usar um proxy reverso para fazer parecer que o site externo é um subdomínio do seu site. Dê uma olhada no Mod_proxy do Apache, em particular o proxyPassReverve

Outra alternativa é retornar os dados como um objeto JSON:u003Cscript src="foo"> can retrieve whatever data it wants from wherever it wants. Downside of this is that it's not (easily) repeatable (as in multiple requests from same page).

Eu também recomendo que você Google para "Google Mashups". A maioria deles vive no domínio "googlemashops.com", o que facilita muito a implementação. Alguns vivem fora desse domínio e podem lhe dar algumas idéias.

EDIT: Em vez de usar o objeto XmlHttPrequest diretamente, recomendo passar por uma biblioteca de terceiros, como o prototype.js

Outras dicas

Se o XML que você está tentando recuperar for devolvido por uma das APIs JS do Google, não há necessidade de xmlHttPrequest (já que isso só pode ser usado no mesmo domínio que sua página da página).

Portanto, no caso de usar uma API do Google, como o Maps One, geralmente começa adicionando uma referência à sua API comum em algum lugar da sua página:

<script type="text/javascript" src="http://www.google.com/jsapi?key=your_google_api_key"></script>

Em seguida, adicione uma referência às API (s) específicas (s) que você planeja usar na sua página:

<script type="text/javascript">google.load("maps", "2");</script>

Agora você pode chamar as várias funções fornecidas por essa API:

<script type="text/javascript">
  function initialize() {
    var map = new google.maps.Map2(document.getElementById("map"));
    map.setCenter(new google.maps.LatLng(41.86, 87.68), 13);
  }
  google.setOnLoadCallback(initialize);
</script>

Não é necessário xmlHttPrequest :)

Você pode usar o JSONP para fazer isso. eu faço aqui usando jQuery e php. Basicamente, eu uso o proxy PHP para embrulhar a resposta JSON para que o jQuery possa lidar com isso. Está sob BSD.

Como alternativa, tente usar o IE8. Se você estiver executando do disco e não um site, o IE8 ignorará todas as restrições normais do domínio e obterá os dados desejados.

Com JQuery (e presumivelmente XHR, mas tento não usá-lo diretamente), você pode fazer solicitações de domínio cruzado, desde que não especifique cabeçalhos incomuns ou métodos não-get. Se você deseja usá -los, deve ter controle do servidor para ativar as solicitações de opções.

Ver https://developer.mozilla.org/en/http_access_control para detalhes.

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