有人可以为我澄清这段代码吗?

时间:2014-04-04 08:24:51

标签: javascript php laravel export-to-csv

这篇文章应该创建一个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有多列而不是列标题,差别来自哪里

3 个答案:

答案 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的内容,看看发生了什么。 过滤列有一些奇怪的条件...但如果您不显示您尝试解析的数据,可以帮助您。