クライアント側の JavaScript オブジェクトをファイルとしてローカルに保存しようとしています。これが可能かどうかはわかりません。
基本的なアーキテクチャは次のとおりです。
- 外部 API を ping して 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.phpFirefox でサイトにアクセスすると、次のdownload.jsonテキスト ファイルをダウンロードするように求められます。
(["zero","one","two","testing the encoding"]);
クリック#downloadして AJAX 呼び出しを実行すると、Firebug にログインします
Data Received: testing the encoding
これはほとんど私が期待するものです。JSON 文字列を受け取ってシリアル化しています。これはすばらしいことです。私は2つのことを見逃しています:
実際の質問
- ブラウザーでページにアクセスしたときと同じ、ダウンロードを求めるプロンプトの動作を得るには、何をする必要がありますか?
- (はるかに簡単)サーバー側で、サーバーに送信されてシリアル化されるjsonオブジェクトにアクセスするにはどうすればよいですか?GET配列のどのインデックスかわかりません(ばかげていますが、ほとんどすべてを試しました)