使用php ajax调用将mysql数据导出到excel

使用php ajax调用将mysql数据导出到excel,php,jquery,ajax,Php,Jquery,Ajax,我正在做一个ajax调用,调用了一个php页面,该页面正在从mysql表提取数据,需要将其转换为excel,并且只需要存储在服务器文件夹中 现在的问题是,在执行ajax调用时,它将转到该php页面并返回主页面,而不创建excel文件 但是当我直接测试php页面时,它会创建excel文件并下载它。但是为什么它不能通过ajax调用工作呢 这是我上一页的ajax调用-- 这是我的php页面,正在导出到excel-- 如果我直接运行这个php页面,我会得到excel文件,但是通过ajax调用它不起作

我正在做一个ajax调用,调用了一个php页面,该页面正在从mysql表提取数据,需要将其转换为excel,并且只需要存储在服务器文件夹中

现在的问题是,在执行ajax调用时,它将转到该php页面并返回主页面,而不创建excel文件

但是当我直接测试php页面时,它会创建excel文件并下载它。但是为什么它不能通过ajax调用工作呢

这是我上一页的ajax调用--

这是我的php页面,正在导出到excel--



如果我直接运行这个php页面,我会得到excel文件,但是通过ajax调用它不起作用。

希望这个示例对您最有效。 我已经使用window.open并使用参数设置了目标文件的url

使用的JS代码

/* Export Orders */
$(document).on('click','#btn_export_delivery_order',function(){       
        var first_input = $('#name_email_order_search').val();
        var date_range = $('#reportrangeorder').val();        
        var order_status = $('#order_status').val();                
        window.open("ajax_responce.php?method_name=export_orders&shop="+ shop+"&first_input=" + first_input + "&date_range=" + date_range + "&order_status=" + order_status + "", '_blank');
});
ajax_response.php中使用的代码

公共功能导出命令(){ ob_start()


此代码测试良好,运行良好。

希望此示例最适合您。 我已经使用window.open并使用参数设置了目标文件的url

使用的JS代码

/* Export Orders */
$(document).on('click','#btn_export_delivery_order',function(){       
        var first_input = $('#name_email_order_search').val();
        var date_range = $('#reportrangeorder').val();        
        var order_status = $('#order_status').val();                
        window.open("ajax_responce.php?method_name=export_orders&shop="+ shop+"&first_input=" + first_input + "&date_range=" + date_range + "&order_status=" + order_status + "", '_blank');
});
ajax_response.php中使用的代码

公共功能导出命令(){ ob_start()


这段代码测试良好,工作正常。

您正在使用POST,但在url中传递数据(通过GET)。此外,如果您得到重定向,您可能不会阻止触发ajax的元素的默认操作(表单?),请向我们显示触发ajax的完整js“只需存储在服务器文件夹中”…PHP被编程为发送文件供下载,而不是将其保存到服务器。因此,如果您需要更改PHP的行为,则需要更改PHP。通过ajax下载文件效果不佳,因为返回的数据(即excel文档数据)最后出现在
response
Javascript变量中,而不是作为客户端计算机上的文件,这是一个无法轻易逃脱的监狱。如果要通过Javascript触发下载,最好对提示下载的URL执行window.location或window.open命令。@ADyson ok让我们假设我只想下载,然后它不起作用,但这与你声称的“在服务器上保存”的目标相矛盾。如果一个donwload实际上是你想要的(在这种情况下,将你的问题文本更改为准确),然后查看我上面编辑的评论,了解为什么它不能通过ajax下载。这类问题也会被问到很多,因此,如果您搜索,您可能会找到很多以前与它相关的资料,并有类似的解释。您使用的是POST,但在url中传递数据(通过GET)。此外,如果您得到重定向,您可能不会阻止触发ajax的元素的默认操作(表单?)向我们显示触发ajax的完整js“只需存储在服务器文件夹中”…PHP被编程为发送文件供下载,而不是将其保存到服务器。因此,如果您需要更改PHP的行为,则需要更改PHP。通过ajax下载文件效果不佳,因为返回的数据(即excel文档数据)最后出现在
response
Javascript变量中,而不是作为客户端计算机上的文件,这是一个无法轻易逃脱的监狱。如果要通过Javascript触发下载,最好对提示下载的URL执行window.location或window.open命令。@ADyson ok让我们假设我只想下载,然后它不起作用,但这与你声称的“在服务器上保存”的目标相矛盾。如果一个donwload实际上是你想要的(在这种情况下,将你的问题文本更改为准确),然后查看我上面编辑的评论,了解为什么它不能通过ajax下载。这类问题也会被问到很多,如果你搜索的话,你可能会找到很多以前与它相关的材料,以及类似的解释。
/* Export Orders */
$(document).on('click','#btn_export_delivery_order',function(){       
        var first_input = $('#name_email_order_search').val();
        var date_range = $('#reportrangeorder').val();        
        var order_status = $('#order_status').val();                
        window.open("ajax_responce.php?method_name=export_orders&shop="+ shop+"&first_input=" + first_input + "&date_range=" + date_range + "&order_status=" + order_status + "", '_blank');
});
        if (isset($_GET['shop']) && $_GET['shop'] != '') {
            $export = array();
            $export_data = array();
            $shopinfo = $this->get_settings($_GET['shop']);
            $store_client_id = $shopinfo['store_client_id'];
            $date_format = $shopinfo['date_format_first'];

            $options_arr = array("skip" => 0, "limit" => 99999);            
            $where = $this->where_to_clause_export_search($store_client_id, $_GET);
            $fullfilment_status_array = array('Unfulfilled','Fullfill','Partially fullfill','Cancelled');

            $export_result = $this->select_result(TABLE_ORDERS, '*', $where, $options_arr);

            foreach($export_result['data'] as $row){
                    $export['Name'] = $row['order_name'];
                    $export['Billing Name'] = $row['first_name'] . ' ' . $row['last_name'];
                    $export['Email'] = $row['email'];
                    $export['Fulfillment Status'] = $fullfilment_status_array[$row['status']];
                    $export['Total'] = $row['total'];
                    $export['Created at'] = date($date_format, strtotime($row['created_at']));
                    $export['Delivery Status'] = $row['delivery_status'] == 0 ? 'Pending' : 'Delivered';
                    $export['Delivery Date'] = date($date_format, strtotime($row['delivery_date']));
                    $export['Delivery Time'] = (isset($row['delivery_time']) && $row['delivery_time'] != '') ? $row['delivery_time'] : '-';
                    $export_data[] = $export;
            }

            /* Export Data */
            $filename = "orders_export.csv";
            $f = fopen('php://output', 'w');
            header('Content-type: application/csv');
            header('Content-Disposition: attachment; filename=' . $filename);
            $outputdata = $export_data;

            $firstLineKeys = false;
            foreach ($outputdata as $row) {
                if (empty($firstLineKeys)) {
                    $firstLineKeys = array_keys($row);
                    fputcsv($f, $firstLineKeys);
                    $firstLineKeys = array_flip($firstLineKeys);
                }
                fputcsv($f, $row);
            }
            fclose($f);
            ob_end_flush();
            exit();
        }
    }