Как я могу использовать JSONP для загрузки клиентских JavaScript-объектов? - PullRequest
2 голосов
/ 14 марта 2010

Я пытаюсь сохранить клиентские JavaScript-объекты локально в виде файла. Я не уверен, возможно ли это.

Базовая архитектура такова:

  1. Проверка связи с внешним API для получения объекта JSON
  2. Работайте на стороне клиента с этим объектом и в конечном итоге получите ссылку "скачать меня"
  3. Эта ссылка отправляет данные на мой сервер, который обрабатывает их и отправляет обратно с типом 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 и сериализую ее, и это здорово. Мне не хватает двух вещей:

Актуальные вопросы

  1. Что мне нужно сделать, чтобы получить то же поведение при загрузке, что и при посещении страницы в браузере
  2. (намного проще) Как мне получить доступ на стороне сервера к объекту json, отправляемому на сервер для его сериализации? Я не знаю, какой это индекс в массиве GET (глупо, я знаю, но я перепробовал почти все)

1 Ответ

2 голосов
/ 14 марта 2010
  1. Вы должны указать браузеру посетить страницу, обычно установив window.location.
  2. Поскольку это строка, она будет отправлена ​​как часть необработанной строки запроса. Попробуйте поискать в $_SERVER['QUERY_STRING'].
...