jquery を使用して get クエリを php スクリプトに設定し、データベースにクエリを実行して画面に書き込みますが、ヘッダーを使用してもダウンロードをトリガーできません。
手順は次のとおりです。
ユーザーがクリックしてデータをダウンロードするリンクを作成する
javascript はクエリ パラメータを php に送信します
php はデータベースにクエリを実行し、ファイルを書き込みます
クライアントはファイルをダウンロードします
しかし、ステップ4を実行できません。
ステップ 1: (これは、パラメーターも含むテーブル オブジェクトです。
d3.select("#some-div").append('a")
.attr("href", "javascript: void(0)")
.on("click", function() { this.saveAsCSV() };
ステップ 2: クエリを作成する Javascript ファイル:
var saveAsCSV = function(params) {
var tmp_params = $.extend({}, params);
tmp_params['State'] = "NM";
$.get('php/get_data.php', tmp_params);
}
クエリを返す php:
...
header("Content-type: application/text-csv");
header("Content-Disposition: attachment; filename=query_result.csv");
while($row = $result->fetchArray() {
print "$row";
}
...
javascript関数でデータを正しくクエリして出力するという点で問題なく動作します(したがって、それをget return関数に追加するとconsole.logに出力されます)が、どうすればよいかわかりません直接ダウンロードするだけです。
私が試したことの 1 つは、params オブジェクトで次のことを行うことです。
var param_string = encodeURIComponent(JSON.stringify(params));
location.href = 'http://www.mysite.com"+param_string;
しかし、どちらもユーザーをページから遠ざけ、データのダウンロードに失敗します。
編集:phpファイルがクエリをcsv形式で出力することを明確にする必要があります。問題は、$.get() 関数を使用しても、php ヘッダーに関係なくダウンロードがトリガーされないことです。URLアドレスのパラメーターを使用して簡単なリンクを提供するだけでよいのかもしれませんが、phpスクリプトが解釈できるようにJavaScriptオブジェクトをURL形式にする方法がわかりません。