Pergunta

Eu sei que este é um tópico popular, mas eu ainda tenho que encontrar uma resposta que é completamente abrangente.

Eu estou tentando criar uma maneira simples para os nossos 'clientes' para colocar um Mapa do Google no seu site, que apresenta a posição de nossos clientes (ou um subconjunto dele) no mapa.Os clientes estão em um banco de dados MySQL, que é transformada em XML on-the-fly através de um script PHP (como por exemplo do Google).Isso funciona bem no meu site, mas quando eu tento-em outro site o xmlHTTPRequest não é permitido olhar para o PHP como em outro domínio.

Eu posso contornar esta escrevendo outro arquivo PHP no outro domínio que simplesmente lê o arquivo PHP no domínio original.Mas não a todos os nossos clientes terão o PHP rodando em seus servidores.Existe alguma maneira que eu possa retornar o XML resultados do nosso banco de dados usando JavaScript?

Um par de pontos:

  1. O JavaScript que faz com que o xmlHTTPRequest ainda se senta em nossa servidor -- nossos clientes link de uma tag de script.Eu pensei que poderia ser suficiente, mas a 'origem' (de acordo com o google Chrome, pelo menos) é ainda visto como domínio#2

  2. Isso é ótimo:se eu usar uma referência absoluta no xmlHTTPRequest (e.g.pedido.abrir('GET', 'http://mydomain.com/api/foo.php', true)), em seguida, ele irá falhar com o IE, mas se eu usar uma referência relativa ('/api/foo.php') isso vai funcionar.

  3. Eu não sei o suficiente sobre isso, mas eu poderia usar o JSON?Eu vi:'script src="http://..../someData.js?callback=some_func"' mas não sei como, eu faria 'someData.js' olha como JSON?(Eu estou pensando muito em termos de funções, o que provavelmente está incorreta?).

  4. Eu tentei adicionar:cabeçalho("Access-Control-Allow-Origin:*");para a parte superior do PHP que gera o XML, mas não é realmente fazer muita coisa que eu posso dizer!

  5. Se eu usar um wrapper PHP no servidor do cliente, qual é a vantagem de usar uma solicitação cURL, ao invés de simples file_get_contents ou fopen?

Desculpe, muitas perguntas, mas nenhuma orientação seria muito apreciada.

Enorme obrigado,

Tapete

Foi útil?

Solução

Uma maneira fácil de contornar isso é deixar seu script PHP retornar algo como:

callback_function(YOUR_DATA);

Então, no script JS incluído no site dos clientes, você insira dinamicamente um <script> que tem src Apontando para o seu script PHP:

(function() {
    var scriptElement   = document.createElement('script');
    scriptElement.type  = 'text/javascript';
    scriptElement.async = true;
    scriptElement.src   = 'http://example.org/yourScript.php?data=...';
    var container       = document.getElementsByTagName('script')[0];
    container.parentNode.insertBefore(scriptElement, container);
})();

Esta técnica é chamada JSONP e deve fazer exatamente o que você quer;)

Outra maneira de contornar o problema seria permitir o domínio cruzado xmlHttPrequest na política de segurança de conteúdo. Mas acho que apenas o Firefox 4 apóia isso agora.

Outras dicas

Você pode usar o JSON ao invés de XML?Se assim for, sua opção 3) é provavelmente vai ser a sua melhor aposta.Existem riscos de segurança com esta abordagem, e ele deve ser usado apenas para fontes conhecidas e confiáveis.

Mais leituras: http://www.codeproject.com/KB/aspnet/JSONToJSONP.aspx

O JavaScript é do lado do cliente, mas o banco de dados não é. O JavaScript não pode extrair diretamente de um banco de dados MySQL.

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