Come posso utilizzare JSONP per scaricare client-side oggetti JavaScript?
-
19-09-2019 - |
Domanda
Sto cercando di JavaScript lato client oggetti salvati come file in locale. Non sono sicuro se questo è possibile.
L'architettura di base è questa:
- Ping An API esterna per ottenere indietro un oggetto JSON
- Lavoro sul lato client con l'oggetto, e, infine, hanno un "mi scaricare" collegamento
- Questo link invia i dati al server, che lo elabora e lo invia indietro con un tipo MIME
application/json
, che (dovrebbe) richiede all'utente di scaricare il file in locale.
In questo momento qui sono i miei pezzi:
codice lato server
<?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 . ');';
?>
Client Rilevante codice lato
$("#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;
});
In questo momento quando visito il sito api.php
con Firefox, viene richiesto un download di download.json
e che si traduce in questo file di testo, come previsto:
(["zero","one","two","testing the encoding"]);
E quando si fa clic #download
per eseguire la chiamata AJAX, si registra in Firebug
Data Received: testing the encoding
che è quasi ciò che mi aspettavo. Ricevo la stringa JSON e serializzazione di esso, che è grande. Mi manca due cose:
Le Domande effettivi
- Che cosa devo fare per ottenere lo stesso comportamento pronta-per-download che ottengo quando visito la pagina in un browser
- (molto più semplice) Come faccio ad accedere, lato server, l'oggetto JSON viene inviato al server per serializzare esso? Non so che cosa è indice nella matrice GET (stupida, lo so, ma ho provato quasi tutto)
Soluzione
- È necessario dire al browser per visitare la pagina, di solito impostando
window.location
. - Dal momento che è una stringa, verrà inviato come parte della stringa di query crudo. Prova a guardare in
$_SERVER['QUERY_STRING']
per esso.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow