这篇文章应该创建一个csv文件。调用nonAjaxPost的方法是:
function exportCSV()
{
nonAjaxPost('getExport', 'post', {action: '/getView', 'view': current_pi, 'parameters': encodeURIComponent(JSON.stringify(current_parameters))});
}
function nonAjaxPost(action, method, input) {
"use strict";
var form;
form = $('<form />', {
action: action,
method: method,
style: 'display: none;'
});
if (typeof input !== 'undefined') {
$.each(input, function (name, value) {
$('<input />', {
type: 'hidden',
name: name,
value: value
}).appendTo(form);
});
}
form.appendTo('body').submit();
}
我的问题是我似乎无法理解这将如何为我创建一个csv文件。我可能错过了一些我看不到的东西。
我真的希望有人可以帮助我。
更新
这是getExport函数:
$databundle = $this->_getData();
$data = $databundle['rows'];
$columns_all = $databundle['columns'];
$columns = array("Id");
foreach($data[0] as $key => $column) {
$column = "";
$found = false;
foreach($columns_all as $col_search) {
if($col_search['key'] == @$key) {
$found = true;
$column = $col_search['title'];
break;
}
}
if($found) {
//echo $key . ",";
$columns[] = $column;
}
}
$contents = putcsv($columns, ';', '"');
foreach($data as $key => $vals) {
if(isset($vals['expand'])) {
unset($vals['expand']);
}
array_walk($vals, '__decode');
$contents .= putcsv($vals,';', '"');
}
$response = Response::make($contents, 200);
$response->header("Last-Modified",gmdate("D, d M Y H:i:s") . " GMT");
$response->header("Content-type","text/x-csv");
$response->header("Content-Disposition","attachment; filename=".str_replace(" ","_",$databundle['title'])."_".date("Y-m-d_H:i").".csv");
return $response;
它还调用getData函数,即:
$viewClass = str_replace('/', '', (isset($_POST['view']) ? $_POST['view'] : $_GET['view']));
$fileView = '../app/classes/view.'.$viewClass.'.php';
if(file_exists($fileView))
{
require_once($fileView);
$className = 'view_'.$viewClass;
if(class_exists($className))
{
$view = new $className();
//Seek for parameters
if(isset($_REQUEST['parameters']))
{
//Decode parameters into array
$parameters = json_decode(urldecode((isset($_POST['parameters']) ? $_POST['parameters'] : $_GET['parameters'])),true);
//Get supported parameters
$parameterTypes = $view->getVars();
$vars = array();
foreach($parameterTypes as $key => $type)
{
//If a value is found for a supported parameter in $_GET
if(isset($parameters[$key]))
{
switch($type)
{
case 'int':
$vars[$key] = intval($parameters[$key]);
break;
case 'float':
$vars[$key] = floatval($parameters[$key]);
break;
case 'filterdata':
// todo: date validation
$vars[$key] = $parameters[$key];
break;
}
}
}
$view->setVars($vars);
}
return $view->getData();
}
else {
/*
header('HTTP/1.1 500 Internal Server Error');
echo 'Class ' . $className . ' does not exist.';
*/
return false;
}
}
else {
/*
header('HTTP/1.0 404 Not Found');
die('Cannot locate view (' . $fileView . ').');
*/
return false;
我希望这已经足够了。
简而言之,我想要找出的是它产生的csv有多列而不是列标题,差别来自哪里
答案 0 :(得分:0)
我的猜测是你正在呼叫的页面(在服务器上)正在生成CSV文件。
您需要在服务器上编写代码才能进行转换。
答案 1 :(得分:0)
此方法向getView页面发出post请求。您的csv创建代码将出现在getView页面上。
答案 2 :(得分:0)
这是使用您的数据创建不可见表单的前端代码:current_parameters
。
查看当前文件中current_parameters
的内容。
查看后端代码并查找"getExport"
函数(它应该是当前加载的php文件)
如果你刚从某个例子中复制了这个函数......你必须自己添加后端代码。
<强>更新强>:
查看getExport代码:
$contents = putcsv($columns, ';', '"');
$contents .= putcsv($vals,';', '"');;
第一行插入标题,第二行循环数据并插入其他行。
打印$columns
和$vals
的内容,看看发生了什么。
过滤列有一些奇怪的条件...但如果您不显示您尝试解析的数据,可以帮助您。