JSONP を使用してクライアント側 JavaScript オブジェクトをダウンロードするにはどうすればよいですか?
-
19-09-2019 - |
質問
ローカルにファイルとして保存されたクライアント側の 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.php
Firefox を使用してサイトにアクセスすると、次のファイルのダウンロードを求められます。 download.json
その結果、予想どおり、次のテキスト ファイルが作成されます。
(["zero","one","two","testing the encoding"]);
そしてクリックすると #download
AJAX 呼び出しを実行するには、Firebug にログインします。
Data Received: testing the encoding
それはほぼ私が予想していた通りです。JSON 文字列を受信してシリアル化しています。これは素晴らしいことです。私には次の 2 つのものが欠けています。
実際の質問
- ブラウザでページにアクセスしたときと同じ、ダウンロードを求めるプロンプトの動作を実現するにはどうすればよいですか
- (はるかに単純です) シリアル化するためにサーバーに送信される json オブジェクトにサーバー側でアクセスするにはどうすればよいですか?GET 配列内のインデックスが何なのかわかりません (愚かなことはわかっていますが、ほとんどすべてのことを試しました)
解決
- 通常は設定によって、ブラウザにページにアクセスするように指示する必要があります。
window.location
. - これは文字列であるため、生のクエリ文字列の一部として送信されます。覗いてみてください
$_SERVER['QUERY_STRING']
それのための。
所属していません StackOverflow