2017-08-11 69 views
0

我试图为我的表实现excel导出功能。我发送表单数据与Ajax和PHP脚本创建文件与此数据,然后什么都没有。我想要ajax返回用php创建的文件。这是我的代码。使用php脚本创建的AJAX返回文件

$('body').on('click', '#excel', function() {   
    var veri = $('form[method="get"]').serializeArray(); 
    veri['action'] = 'userexcel'; 
    jQuery.ajax({ 
      type: "POST", 
      url: <?php echo '"' . admin_url('admin-ajax.php') . '"';?>, 
      data: veri, 
      success: function(data){ 
       alert(data); 
      } 
     }); 
    return false; 
}); 

而且我的PHP函数

function exportExcel($filename='ExportExcel',$columns=array(),$data=array(),$replaceDotCol=array()){ 
header('Content-Encoding: UTF-8'); 
header('Content-Type: text/plain; charset=utf-8'); 
header("Content-disposition: attachment; filename=".$filename.".xls"); 
echo "\xEF\xBB\xBF"; // UTF-8 BOM 

$say=count($columns); 

echo '<table border="1"><tr>'; 
foreach($columns as $v){ 
    echo '<th style="background-color:#FFA500">'.trim($v).'</th>'; 
} 
echo '</tr>'; 

foreach($data as $val){ 
    echo '<tr>'; 
    for($i=0; $i < $say; $i++){ 

     if(in_array($i,$replaceDotCol)){ 
      echo '<td>'.str_replace('.',',',$val[$i]).'</td>'; 
     }else{ 
      echo '<td>'.$val[$i].'</td>'; 
     } 
    } 
    echo '</tr>'; 
} 
} 
+3

没有必要为此使用ajax。发送适当的标题下载将迫使你留在同一页面。 –

+0

这是一个WordPress站点,因此出于安全原因使用wp的ajax函数会更好。 –

+1

安全原因?无论哪种方式,这是一个HTTP请求...大声笑 – epascarello

回答

1

生成代码工作得很好,但是,如果要强制浏览器下载文件时,你有两个选择。

创建本地文件

你有实际的地方保存该文件在服务器上,然后返回的链接,然后通过成功AJAX调用后改变window.location.href = "<url_of_xls_file>"开始下载。

使窗体后直接到 AJAX调用

现在,如果你不想在服务器上创建一个文件,那么你就必须摆脱的办法,请将您的表单action属性更改为admin_url('admin-ajax.php'),然后在您的表单中手动添加<input type="hidden" name="action" value="userexcel">操作。

您将使浏览器使用这两种方法弹出下载对话框。