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:

  1. Ping una API externa para volver un objeto JSON
  2. del lado del cliente Trabaja con ese objeto, y, finalmente, tiene un "yo descarga" enlace
  3. 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

  1. ¿Qué tengo que hacer para conseguir el mismo comportamiento de solicitud-a-descarga que consigo cuando visita la página en un navegador
  2. (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)
¿Fue útil?

Solución

  1. Es necesario indicar al navegador para visitar la página, por lo general mediante el establecimiento de window.location.
  2. 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
scroll top