2

クライアント側の JavaScript オブジェクトをファイルとしてローカルに保存しようとしています。これが可能かどうかはわかりません。

基本的なアーキテクチャは次のとおりです。

  1. 外部 API を ping して 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.phpFirefox でサイトにアクセスすると、次のdownload.jsonテキスト ファイルをダウンロードするように求められます。

 (["zero","one","two","testing the encoding"]);

クリック#downloadして AJAX 呼び出しを実行すると、Firebug にログインします

Data Received: testing the encoding

これはほとんど私が期待するものです。JSON 文字列を受け取ってシリアル化しています。これはすばらしいことです。私は2つのことを見逃しています:

実際の質問

  1. ブラウザーでページにアクセスしたときと同じ、ダウンロードを求めるプロンプトの動作を得るには、何をする必要がありますか?
  2. (はるかに簡単)サーバー側で、サーバーに送信されてシリアル化されるjsonオブジェクトにアクセスするにはどうすればよいですか?GET配列のどのインデックスかわかりません(ばかげていますが、ほとんどすべてを試しました)
4

1 に答える 1

2
  1. 通常は を設定して、ブラウザーにページにアクセスするように指示する必要がありますwindow.location
  2. これは文字列であるため、生のクエリ文字列の一部として送信されます。探してみてください$_SERVER['QUERY_STRING']
于 2010-03-14T02:14:02.913 に答える