Я пытаюсь сохранить клиентские JavaScript-объекты локально в виде файла. Я не уверен, возможно ли это.
Базовая архитектура такова:
- Проверка связи с внешним API для получения объекта JSON
- Работайте на стороне клиента с этим объектом и в конечном итоге получите ссылку "скачать меня"
- Эта ссылка отправляет данные на мой сервер, который обрабатывает их и отправляет обратно с типом mime
application/json
, который (должен) предложить пользователю загрузить файл локально.
Прямо сейчас вот мои работы:
Код серверной стороны
<?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 . ');';
?>
Соответствующий код на стороне клиента
$("#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;
});
Прямо сейчас, когда я захожу на сайт api.php
с Firefox, он запрашивает загрузку download.json
, и в результате получается следующий текстовый файл:
(["zero","one","two","testing the encoding"]);
И когда я нажимаю #download
, чтобы выполнить вызов AJAX, он регистрируется в Firebug
Data Received: testing the encoding
это почти то, что я ожидал. Я получаю строку JSON и сериализую ее, и это здорово. Мне не хватает двух вещей:
Актуальные вопросы
- Что мне нужно сделать, чтобы получить то же поведение при загрузке, что и при посещении страницы в браузере
- (намного проще) Как мне получить доступ на стороне сервера к объекту json, отправляемому на сервер для его сериализации? Я не знаю, какой это индекс в массиве GET (глупо, я знаю, но я перепробовал почти все)