Como posso usar JSONP para download de objetos JavaScript do lado do cliente?
-
19-09-2019 - |
Pergunta
Eu estou tentando obter do lado do cliente javascript objetos salva como um arquivo localmente. Eu não tenho certeza se isso é possível.
A arquitetura básica é esta:
- Ping uma API externa para receber de volta um objeto JSON
- do lado do cliente Trabalho com esse objeto, e, eventualmente, ter um "Transferência me" elo
- Este link envia os dados para o meu servidor, que processa-lo e envia-lo de volta com um
application/json
tipo mime, que (deve) alerta o usuário para baixar o arquivo localmente.
Agora, aqui estão minhas peças:
Servidor de Código Side
<?php
$data = array('zero', 'one', 'two', 'testing the encoding');
$json = json_encode($data);
//$json = json_encode($_GET['']); //eventually I'll encode their data, but I'm testing
header("Content-type: application/json");
header('Content-Disposition: attachment; filename="backup.json"');
echo $_GET['callback'] . ' (' . $json . ');';
?>
Cliente Relevante Código Side
$("#download").click(function(){
var json = JSON.stringify(collection); //serializes their object
$.ajax({
type: "GET",
url: "http://www.myURL.com/api.php?callback=?", //this is the above script
dataType: "jsonp",
contentType: 'jsonp',
data: json,
success: function(data){
console.log( "Data Received: " + data[3] );
}
});
return false;
});
Agora, quando eu visitar o site api.php
com o Firefox, ele solicitará um download de download.json
e que os resultados neste arquivo de texto, como esperado:
(["zero","one","two","testing the encoding"]);
E quando eu clico #download
para executar a chamada AJAX, ele registra em Firebug
Data Received: testing the encoding
que é quase o que eu esperaria. Estou recebendo a string JSON e serialização-lo, o que é ótimo. Eu estou sentindo falta de duas coisas:
As perguntas reais
- O que eu preciso fazer para obter o mesmo comportamento pronta-a-download que eu recebo quando eu visitar a página em um navegador
- (muito mais simples) Como o acesso I, do lado do servidor, o objeto JSON sendo enviados para o servidor para serializar isso? Eu não sei o índice é na matriz GET (bobo, eu sei, mas eu tentei quase tudo)
Solução
- Você precisa dizer ao navegador para visitar a página, normalmente, definindo
window.location
. - Uma vez que é uma string, ele será enviado como parte da string de consulta cru. Tente procurar no
$_SERVER['QUERY_STRING']
para ele.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow