PHP:无法将CSV文件流式传输到客户端以响应AJAX调用

时间:2013-08-16 16:17:03

标签: php ajax csv

我正在向客户展示报告。我做了一个传递“传递”变量的ajax调用,它是“显示”或“下载”。

这是ajax调用:

$.ajax({
        type: 'POST',
        url: 'ajaxController.php',
        dataType: 'json',
        data: {
            e: "getReport",
            reportName: reportName,
            delivery: delivery
        },
        success: function (data) {
            if (delivery === 'display') {
                $("#reportDisplayTableHeader").html('');
                $("#reportDisplayTableBody").html('');
                Lifestyle.selectedReportRows = data;

                $.each(Lifestyle.selectedReportRows, function(key, row) {
                    rowHTML = '<tr>';

                    $.each(row, function(parameter, value) {
                        if (isHeader) {
                            rowHTML += '<td>' + parameter + '</td>';
                        } else {
                            rowHTML += '<td>' + value + '</td>';
                        }
                    });

                    rowHTML += '</tr>';

                    if (isHeader) {
                        $reportHead.append(rowHTML);
                        isHeader = false;
                    } else {
                        $reportTableBody.append(rowHTML);
                    }
                });

                $("#reportCaption").show();
            }
        }
    });

这是服务器端PHP:

    if ($delivery == 'display') {
        echo json_encode($return);
    } else if ($delivery == 'download') {
        header("Content-type: text/csv");
        header("Content-Disposition: attachment; filename=file.csv");           
        header('Content-Description: File Transfer');
        header("Pragma: no-cache");
        header("Expires: 0");
        echo "record1,record2,record3\n";
    }

在“display”的情况下,它返回json就好了,客户端显示一个表。

在“下载”的情况下,我希望它弹出一个下载对话框,它可以保存我回复给他们的CSV。

但正在发生的是调用正在完成并且headers / csv正在越线(感谢Fiddler),但是没有出现下载对话框,客户端也不知道我将csv推送给他们。

要让弹出下载对话框,我需要做什么?

感谢。

1 个答案:

答案 0 :(得分:1)

Ajax调用无法下载某些东西,或者至少它真的很难。 更好的是打开一个新窗口到php文件的位置(然后你应该使用GET),然后用户将被要求下载它。