Estou tentando carregar uma página HTML entre domínios usando AJAX, mas, a menos que o dataType seja "jsonp", não consigo obter uma resposta. No entanto, usando jsonp, o navegador espera um tipo de script mime, mas recebe "text / html".
Meu código para a solicitação é:
$.ajax({
type: "GET",
url: "http://saskatchewan.univ-ubs.fr:8080/SASStoredProcess/do?_username=DARTIES3-2012&_password=P@ssw0rd&_program=%2FUtilisateurs%2FDARTIES3-2012%2FMon+dossier%2Fanalyse_dc&annee=2012&ind=V&_action=execute",
dataType: "jsonp",
}).success( function( data ) {
$( 'div.ajax-field' ).html( data );
});
Existe alguma maneira de evitar o uso do jsonp para a solicitação? Eu já tentei usar o parâmetro crossDomain, mas não funcionou.
Caso contrário, existe alguma maneira de receber o conteúdo html no jsonp? Atualmente, o console está dizendo "inesperado <" na resposta jsonp.
javascript
jquery
ajax
cross-domain
xonorageous
fonte
fonte
Respostas:
jQuery Ajax Notes
Existem algumas maneiras de superar a barreira entre domínios :
Existem alguns plugins que ajudam com solicitações entre domínios :
Atenção!
A melhor maneira de superar esse problema é criando seu próprio proxy no back-end, para que o seu proxy aponte para os serviços em outros domínios, porque no back-end não existe a mesma restrição de política de origem . Mas se você não pode fazer isso no back-end, preste atenção às dicas a seguir.
Aviso!
O uso de proxies de terceiros não é uma prática segura, pois eles podem acompanhar seus dados, para que possam ser usados com informações públicas, mas nunca com dados privados.
Os exemplos de código mostrados abaixo usam jQuery.get () e jQuery.getJSON () , ambos são métodos abreviados de jQuery.ajax ()
CORS Anywhere
O CORS Anywhere é um proxy node.js que adiciona cabeçalhos CORS à solicitação em proxy.
Para usar a API, basta prefixar o URL com o URL da API. (Suporta https : consulte o repositório do github )
Se você deseja ativar automaticamente solicitações entre domínios, quando necessário, use o seguinte snippet:
Qualquer Origem
Qualquer que seja a origem, é um acesso jsonp entre domínios . Esta é uma alternativa de código aberto ao anyorigin.com .
Para buscar os dados do google.com, você pode usar este snippet:
Proxy CORS
O Proxy CORS é um proxy node.js simples para ativar a solicitação do CORS para qualquer site. Ele permite que o código javascript no seu site acesse recursos em outros domínios que normalmente seriam bloqueados devido à política de mesma origem.
Como funciona? O Proxy CORS aproveita o Compartilhamento de Recursos de Origem Cruzada, um recurso que foi adicionado juntamente com o HTML 5. Os servidores podem especificar que desejam que os navegadores permitam que outros sites solicitem os recursos que hospedam. O Proxy CORS é simplesmente um Proxy HTTP que adiciona um cabeçalho às respostas dizendo "qualquer pessoa pode solicitar isso".
Essa é outra maneira de atingir a meta (consulte www.corsproxy.com ). Tudo o que você precisa fazer é retirar o http: // e o www. a partir do URL que está sendo enviado por proxy e preceda o URL com
www.corsproxy.com/
Navegador proxy CORS
Recentemente eu encontrei este, envolve vários utilitários de compartilhamento remoto de origem cruzada, orientados para a segurança. Mas é uma caixa preta com o Flash como back-end.
Você pode vê-lo em ação aqui: Navegador proxy CORS
Obtenha o código-fonte no GitHub: koto / cors-proxy-browser
fonte
$.ajaxPrefilter
funcionou muito bem. Muito Obrigado!Você pode usar um plug-in jQuery de origem cruzada Ajax. Com este plugin, você usa
jQuery.ajax()
vários domínios. Ele usa os serviços do Google para conseguir isso:É muito simples de usar:
Você pode ler mais aqui: http://www.ajax-cross-origin.com/
fonte
crossOrigin
opção do jQuery certamente não faz nada para mitigar políticas de mesma origem. Eu apagar esta resposta se eu pudesseSe o site externo não suportar JSONP ou CORS, sua única opção é usar um proxy.
Crie um script em seu servidor que solicite esse conteúdo e use o jQuery ajax para acessar o script em seu servidor.
fonte
Basta colocar isso no cabeçalho da sua página PHP e ele funcionará sem a API:
ou
ou
fonte
$_SERVER['HTTP_ORIGIN']
vem. Não consegui encontrá-lo na documentação do PHP ou em qualquer outro lugar.Estou postando isso no caso de alguém enfrentar o mesmo problema que estou enfrentando agora. Eu tenho uma impressora térmica Zebra, equipada com o servidor de impressão ZebraNet, que oferece uma interface de usuário baseada em HTML para editar várias configurações, ver o status atual da impressora etc. Eu preciso obter o status da impressora, que é exibido em uma dessas páginas html, oferecidas pelo servidor ZebraNet e, por exemplo, alertar () uma mensagem para o usuário no navegador. Isso significa que eu tenho que obter essa página html em Javascript primeiro. Embora a impressora esteja na LAN do PC do usuário, essa mesma política de origemainda permanece firme no meu caminho. Eu tentei o JSONP, mas o servidor retorna html e não encontrei uma maneira de modificar sua funcionalidade (se pudesse, eu já teria definido o cabeçalho mágico Access-control-allow-origin: *). Então, decidi escrever um pequeno aplicativo de console em C #. Ele deve ser executado como administrador para funcionar corretamente; caso contrário, ele trollará: D uma exceção. Aqui está um código:
Tudo o que o usuário precisa fazer é executar esse aplicativo de console como administrador. Sei que é muito ... frustrante e complicado, mas é uma solução alternativa para o problema da Diretiva de Domínio, caso você não possa modificar o servidor de nenhuma maneira.
edit: from js eu faço uma simples chamada ajax:
O html da página solicitada é retornado e armazenado na variável de dados .
fonte
Para obter o site externo do formulário de dados passando usando um proxy local, conforme sugerido por jherax, você pode criar uma página php que busca o conteúdo para você a partir do respectivo URL externo e enviar uma solicitação de obtenção para essa página php.
como um proxy php, você pode usar https://github.com/cowboy/php-simple-proxy
fonte
Seu
URL
não funciona atualmente, mas seu código pode ser atualizado com esta solução de trabalho:fonte
Você precisa do proxy CORS que proxies sua solicitação do navegador para o serviço solicitado com os cabeçalhos CORS apropriados . A lista desses serviços está no snippet de código abaixo. Você também pode executar o snippet de código fornecido para ver o ping nesses serviços a partir da sua localização.
fonte
Descobri isso. Usou isso em seu lugar.
fonte