0
私はexportCSV関数を呼び出すボタンを持っています。この関数は、私のpostgresデータベースに対してselect文を実行し、AJAXリクエストを介して結果を返します。データベースへのAJAXリクエスト - .csvファイルをダウンロード
ブラウザからクライアントに返された応答の内容を.csvファイルとして取得するにはどうすればよいですか?現在のところ、コードはブラウザコンソールでのみ応答します。アドバイスをいただければ幸いです。 phpが起動すると、データベースのやり取りを行うsmarthandlerクラスがあります。
exportCSV機能
exportCSV: function() {
var me = this;
var message = 'Are you sure you want to generate the CSV?';
var icon = Ext.Msg.QUESTION;
Ext.Msg.show({
title: 'Confirm Execution',
message: message,
buttons: Ext.Msg.YESNO,
icon: icon,
fn: function(btn) {
if(btn === 'yes') {
// TODO: Probably should handle an error here.
Ext.Ajax.request({
url: 'data.php',
async: true,
params: {
action: 'export-csv',
id: me.currentRecord.data.id,
type: 'Carrier'
},
success: function(response,opts) {
var data = Ext.decode(response.responseText);
var csvContent = "data:text/csv;charset=utf-8,";
data.forEach(function(infoArray, index){
dataString = infoArray.join(",");
csvContent += index < data.length ? dataString+ "\n" : dataString;
});
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "carrier_profile.csv");
document.body.appendChild(link); // Required for FF
link.click(); // This will download the data file named "carrier_profile.csv".
}
});
}
}
});
}
PHPは
else if($action == 'export-csv') {
// Create an array of filters.
$parsedFilters = array();
// TODO: Sanitize the properties better.
if(isset($_REQUEST['filter'])) {
$filters = json_decode($_REQUEST['filter']);
foreach($filters as $record)
array_push($parsedFilters,array($record->property => $record->value));
}
// Convert a request for a specific ID into a filter.
if(isset($_REQUEST['id']))
array_push($parsedFilters,array('id' => $_REQUEST['id']));
$objectHandler = new SmarterHandler($typeDefinition);
$records = $objectHandler->read($type,$parsedFilters);
header('Content-type: text/csv');
header('Content-disposition: attachment;filename=file.csv');
if(count($records) > 0) {
$record = $records[0];
$headings = array();
foreach($record as $key => $value) {
if(is_scalar($value)) {
$headings[] = $key;
echo $key.",";
}
}
echo "\r\n";
foreach($records as $record) {
foreach($headings as $key) {
echo $record[$key].",";
}
echo "\r\n";
}
}
exit();
は}
感謝をエミュレートすることができ、それをダウンロードするには、あなたが(CSVデータの前に
data:text/csv;charset=utf-8
を含む)が正しくフォーマットされたデータを持っていると仮定。これは魅力のように機能します。 しかし、どのようにデータを私のSQLクエリでpostgresqlに取り込むのですか?この例で提供されるハードコードされた値を使用して完全に動作します。 var data = [["name1"、 "city1"、 "some other info"]、["name2"、 "city2"、 "more info"]]; – Jukebox@Jukeboxあなたの質問を理解しているかどうか分からない...あなたのデータベースでSQLクエリを実行する際に問題がありますか?または、クエリの応答を解析する際に問題が発生しましたか? –
@T Patrick ...私はSQLクエリをうまく実行し、ブラウザの検査ウィンドウでその応答を見ることができます。この例では、csvが移入される "data"変数を静的に設定しています - SQLクエリから返される情報に "data"変数を設定するにはどうすればいいですか? – Jukebox