¿Cómo puedo usar JSONP para descargar objetos JavaScript del lado del cliente?
-
19-09-2019 - |
Pregunta
Estoy tratando de llegar del lado del cliente JavaScript objetos guardan como un archivo local. No estoy seguro de si esto es posible.
La arquitectura básica es la siguiente:
- Ping una API externa para volver un objeto JSON
- del lado del cliente Trabaja con ese objeto, y, finalmente, tiene un "yo descarga" enlace
- Este enlace envía los datos a mi servidor, que lo procesa y lo envía de vuelta con un
application/json
tipo MIME, que (debe) pedir al usuario que descargue el archivo localmente.
Ahora aquí están mis piezas:
código del lado del servidor
<?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 . ');';
?>
relevantes del cliente Código lateral
$("#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;
});
Ahora cuando me visita el sitio api.php
con Firefox, se le solicita una descarga de download.json
y que da lugar a este archivo de texto, como se espera:
(["zero","one","two","testing the encoding"]);
Y cuando hago clic #download
para ejecutar la llamada AJAX, registra en Firebug
Data Received: testing the encoding
que es casi lo que cabe esperar. Estoy recibiendo la cadena JSON y la serialización, lo que es grande. Me falta dos cosas:
Las Preguntas real
- ¿Qué tengo que hacer para conseguir el mismo comportamiento de solicitud-a-descarga que consigo cuando visita la página en un navegador
- (mucho más simple) ¿Cómo acceso, del lado del servidor, el objeto JSON que se envía al servidor para serializar? No sé lo que el índice se encuentra en la matriz GET (tonto, lo sé, pero lo he intentado casi todo)
Solución
- Es necesario indicar al navegador para visitar la página, por lo general mediante el establecimiento de
window.location
. - Ya que es una cadena, se enviará como parte de la cadena de consulta en bruto. Trate de buscar en
$_SERVER['QUERY_STRING']
por ello.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow