1

jquery を使用して get クエリを php スクリプトに設定し、データベースにクエリを実行して画面に書き込みますが、ヘッダーを使用してもダウンロードをトリガーできません。

手順は次のとおりです。

  1. ユーザーがクリックしてデータをダウンロードするリンクを作成する

  2. javascript はクエリ パラメータを php に送信します

  3. php はデータベースにクエリを実行し、ファイルを書き込みます

  4. クライアントはファイルをダウンロードします

しかし、ステップ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形式にする方法がわかりません。

4

3 に答える 3

2

php/get_data.php?State=NMURL (おそらく追加のパラメーター)を使用して、ポップアップ/新しいウィンドウ/タブ/何でも開くことができます。出力をダウンロードする必要があります。

$rowただし、配列である変数を出力するだけなので、出力が間違っている可能性があります。そのように配列を印刷しようとすると、単に表示されArrayます。

行を適切に出力する必要があります。残念ながら、私はその問題を解決するのに十分な CSV 構造を知りません。

于 2013-07-02T23:22:45.433 に答える
0

私はそれを考え出した!

基本的に、私のエンコーディングは間違っていました。でエンコードしたくない

encodeURIComponent(JSON.stringify(params));

結果は、php スクリプトでは読み取れません。ただし、$.param() を使用するだけで機能します。

要約すると、ダウンロードは URL リンクを作成し、次に location.href を使用してリンクすることによってトリガーされます。したがって、他のすべては同じですが、ステップ 2 の $.get() の代わりに、次のようにします。

var url_params = $.param(tmp_params);
location.href = url_params;

ダウンロードを生成します。ありがとう!

于 2013-07-02T23:36:48.250 に答える
0

jQuery などを使用して AJAX 呼び出しを行うと、ユーザーをページに表示したままダウンロード ボックスがポップアップ表示されます。次のようにします。

$.ajax({data: {download: 'query_result.csv'}, type: 'GET', url: 'download.php', cache: false });

以前の雇用主のためにこれを数回試しましたが、常にうまくいきました。私は主に .zip および .docx ファイルを使用しましたが。

于 2013-07-02T23:28:58.367 に答える