É possível postar dados no JsonP? Ou todos os dados devem ser passados na querystring como uma solicitação GET?
Tenho muitos dados que preciso enviar para o serviço, entre domínios, e são muito grandes para enviar por meio da string de consulta
Quais são as opções para contornar isso?
POST
solicitações a outros domínios, desde que esse domínio e seu navegador sejam compatíveisCORS
. Mas é totalmente verdade quePOST
eJSONP
não são compatíveis.<script>
tags que apontam para outro domínio. A única maneira de executar solicitações POST em um navegador é por meio de formulários HTML ou XMLHttpRequest.Se você precisar enviar muitos dados entre domínios. Normalmente crio um serviço que você pode chamar em duas etapas:
Primeiro, o cliente faz um envio de FORM (postagem permitida entre domínios). O serviço armazena a entrada na sessão no servidor (usando o GUID como chave). (o cliente cria um GUID e o envia como parte da entrada)
Em seguida, o cliente faz uma injeção de script normal (JSONP) como um parâmetro que você usa o mesmo GUID que você usou na postagem do FORM. O serviço processa a entrada da sessão e retorna os dados no estilo JSONP normal. Depois disso, a sessão é destruída.
É claro que isso depende de você escrever o back-end do servidor.
fonte
XMLHttpRequest
não deveria estar envolvido. A resposta de Per usa um envio de formulário regular para fazer a solicitação POST e, em seguida, uma injeção de elemento de script para fazer a solicitação GET.Sei que isso é uma necromancia séria, mas pensei em postar minha implementação de JSONP POST usando jQuery, que estou usando com sucesso para meu widget JS (usado para registro e login do cliente):
Basicamente, estou usando uma abordagem IFrame, conforme sugerido na resposta aceita. O que estou fazendo de diferente é depois de enviar a requisição, estou verificando, se o formulário pode ser acessado no iframe, usando um timer. Quando o formulário não pode ser alcançado, significa que o pedido foi devolvido. Então, estou usando uma solicitação JSONP normal para consultar o status da operação.
Espero que alguém ache útil. Testado em> = IE8, Chrome, FireFox e Safari.
fonte
Bem, geralmente JSONP é implementado adicionando uma
<script>
tag ao documento de chamada, de forma que a URL do serviço JSONP seja o "src". O navegador busca a origem do script com uma transação HTTP GET.Agora, se seu serviço JSONP estiver no mesmo domínio que sua página de chamada, então você provavelmente poderia remendar algo com uma simples
$.ajax()
chamada. Se não estiver no mesmo domínio, não tenho certeza de como seria possível.fonte
CORS
, será possível, desde que o navegador também ofereça suporte. Nesses casos, você usará simples emJSON
vez deJSONP
.Você pode usar um proxy CORS usando este projeto . Ele direcionaria todo o tráfego para um ponto de extremidade em seu domínio e retransmitiria essas informações para um domínio externo. Como o navegador está registrando todas as solicitações para estar no mesmo domínio, podemos postar JSON. NOTA: Isso também funciona com certificados SSL mantidos no servidor.
fonte
Existe uma solução (hack) que fiz várias vezes, você poderá postar com JsonP. (Você poderá postar o formulário, com mais de 2.000 caracteres do que você pode usar em GET)
Javascript do aplicativo cliente
JAVA:
PHP:
Fazendo assim, você está abrindo seu servidor para qualquer solicitação de postagem, você deve protegê-la novamente fornecendo ident ou outra coisa.
Com este método, você também pode alterar o tipo de solicitação de jsonp para json, ambos funcionam, basta definir o tipo de conteúdo de resposta correto
jsonp
json
Por favor, não que seu servidor não respeitará mais o SOP (política de mesma origem), mas quem se importa?
fonte
<script>
tags em seu HTML DOM (diabos, você pode até mesmo usá-los em aplicativos de desktop, digamos que você queira fazer várias solicitações JSON para o mesmo servidor e quiser usar o nome da função como um ID de rastreamento de solicitação, por exemplo).É possível, aqui está a minha solução:
Em seu javascript:
Em seu url.php:
fonte