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