使用AJAX调用下载PHPExcel文件

使用AJAX调用下载PHPExcel文件,php,jquery,ajax,download,phpexcel,Php,Jquery,Ajax,Download,Phpexcel,我有一个PHPExcel代码,我用它来导出文件,当我通过正常的静态输入运行它时,它工作得非常好,但是当尝试使用ajax调用时,文件不会被下载。 生成代码的php代码如下所示 include "dbconnect.php"; include 'PHPExcel/Classes/PHPExcel/IOFactory.php'; include 'PHPExcel/Classes/PHPExcel.php'; $objPHPExcel = new PHPExcel(); if (isset($_POS

我有一个PHPExcel代码,我用它来导出文件,当我通过正常的静态输入运行它时,它工作得非常好,但是当尝试使用ajax调用时,文件不会被下载。 生成代码的php代码如下所示

include "dbconnect.php";
include 'PHPExcel/Classes/PHPExcel/IOFactory.php';
include 'PHPExcel/Classes/PHPExcel.php';
$objPHPExcel = new PHPExcel();
if (isset($_POST['sql'])) {
    $sql=mysql_query($_POST['sql']);
    echo $sql;
    if($sql === FALSE) {
        die(mysql_error()); // TODO: better error handling
    }
    $objPHPExcel->setActiveSheetIndex(0);
    $objPHPExcel->getActiveSheet()->setCellValue('A1', 'A');
    $objPHPExcel->getActiveSheet()->setCellValue('B1', 'B');
    $objPHPExcel->getActiveSheet()->setCellValue('C1', 'C');
    $objPHPExcel->getActiveSheet()->setCellValue('D1', 'D');
    $objPHPExcel->getActiveSheet()->setCellValue('E1', 'E');
    $objPHPExcel->getActiveSheet()->setCellValue('F1', 'F');
    $objPHPExcel->getActiveSheet()->setCellValue('G1', 'G');
    $objPHPExcel->getActiveSheet()->setCellValue('H1', 'H');
    $objPHPExcel->getActiveSheet()->setCellValue('I1', 'I');
    $objPHPExcel->getActiveSheet()->setCellValue('J1', 'J');
    $objPHPExcel->getActiveSheet()->setCellValue('K1', 'K');
    $objPHPExcel->getActiveSheet()->setCellValue('L1', 'L');
    $objPHPExcel->getActiveSheet()->setCellValue('M1', 'M');

    $n=2;

    while($sqlr= mysql_fetch_array($sql)) {
        $objPHPExcel->getActiveSheet()->setCellValue('A'.$n, $sqlr['a']);
        $objPHPExcel->getActiveSheet()->setCellValue('B'.$n, $sqlr['b']);
        $objPHPExcel->getActiveSheet()->setCellValue('C'.$n, $sqlr['c']);
        $objPHPExcel->getActiveSheet()->setCellValue('D'.$n, $sqlr['d']);
        $objPHPExcel->getActiveSheet()->setCellValue('E'.$n, $sqlr['e']);
        $objPHPExcel->getActiveSheet()->setCellValue('F'.$n, $sqlr['f']);
        $objPHPExcel->getActiveSheet()->setCellValue('G'.$n, $sqlr['g']);
        $objPHPExcel->getActiveSheet()->setCellValue('H'.$n, $sqlr['h']);
        $objPHPExcel->getActiveSheet()->setCellValue('I'.$n, $sqlr['i']);
        $objPHPExcel->getActiveSheet()->setCellValue('J'.$n, $sqlr['j']);
        $objPHPExcel->getActiveSheet()->setCellValue('K'.$n, $sqlr['k']);
        $objPHPExcel->getActiveSheet()->setCellValue('L'.$n, $sqlr['l']);
        $objPHPExcel->getActiveSheet()->setCellValue('M'.$n, $sqlr['m']);
        $n++;
    }
    $objPHPExcel->getActiveSheet()->setTitle('SORTED');

    $objPHPExcel->setActiveSheetIndex(0);
    for($col = 'A'; $col !== 'Z'; $col++) {
        $objPHPExcel->getActiveSheet()
            ->getColumnDimension($col)
            ->setAutoSize(true);

        $objPHPExcel->getActiveSheet()->getStyle("A1:M1")->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()
            ->getStyle('A1:M1')
            ->getFill()
            ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
            ->getStartColor()
            ->setARGB('75b847');
    }

    $objPHPExcel->setActiveSheetIndex(0);
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    ob_end_clean();
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="reports.xls"');
    header('Cache-Control: max-age=0');
    $objWriter->save('php://output');
}
else {
    echo "no luck";
}
?>
JS如下所示

$(document).on("click", "#submit2", function() {
    var sql=$("#sql").val();
    console.log(sql);
    $.ajax({
        type: "POST",
        url: 'exreports.php',
        data: {
            sql : sql
        },
        success: function () {
            window.open(this.url,'_blank' );
        }
    });

});
但这不是下载文件,我不想刷新页面,因为用户可能会执行其他一些操作,如果有任何方法可以在同一窗口中下载,那就太好了

提前感谢

在ajax成功函数中添加
target=\u blank
,如下所示

success: function(){
  window.open('http://YOUR_URL','_blank' );
},

否则,您可以巧妙地使用jQuery触发器功能等在新选项卡中打开Excel下载链接。

可能重复我尝试过的,但对我不起作用,使用它也不走运@NochetImchenTry using
window.location()
不是
窗口。open
@NochetImchen也尝试过,但它没有重定向和添加,我还发布了一些数据,我想它没有进入成功回调。单独编写代码
窗口。location.href()
不在ajax中。无论如何,您不能使用ajax下载文件。这是一个安全问题,所以浏览器不允许它。