运行javascript函数,然后发布下载


Run javascript function then post for download

所以我有一个页面,用户将在其中点击"导出"按钮,我想运行一个javascript函数,获取导出所需的数据,然后调用一个php脚本,从我的数据库中获取数据并强制下载。现在的问题是,我可以运行javascript,然后在脚本中调用post,但没有下载任何东西。我认为这是因为我实际上并没有将窗口移动到php文件,我只是在调用脚本。有人能帮我吗?

javascript:ids是一个数组,我需要通过它来获取信息。这是在用户点击"导出"按钮时我调用的函数taht的内部。

$.ajax({        
   type: "POST",
   url: "exportLeads.php",
   data: { 'idArray' : ids }
}); 

php:我使用了这个通过php导出到CSV。这个功能实现得很好,我没有任何错误。只是没有提示下载的文件。

$data = mysql_query($query) or die($query.mysql_error());
$results = array();
while($line = mysql_fetch_array($data, MYSQL_ASSOC)){
    $results[] = $line;
}
download_send_headers("data_export_" . date("Y-m-d") . ".csv");
echo array2csv($results);
die();

您无法使用ajax下载文件。您可以使用window.location.href将用户重定向到文件位置,但不管怎样,我建议您阅读本文,有人会为您提供更好的答案:)

通过jQuery.Ajax下载文件

或者你也可以用这样的东西在您的javascript 中

$.post( "exportLeads.php", { 'idArray' : ids }, function( response ) {
  if ( response.error === 0 ) {
    window.location.href  = response.location;
  }
}, "json" );

以及在您的php文件中

<?php
  if ( $has_error ) {
    echo json_encode( array( "error" => 1 ) );
  }
  else {
    echo json_encode( array(
      "error"     =>  0,
      "location"  =>  "link_to_file"
    ) );
  }
?>

没有时间写代码,但简而言之,您需要:

  • 执行JS,通过ajax调用服务器端
  • 生成文件,用一些随机名称将其放入服务器驱动器。记住会话的名称。向客户端发送一些响应
  • 当客户端收到响应时,用JS将用户重定向到某个页面,PHP代码会在该页面检查会话中是否有文件名,如果有,则读取该文件,并从会话中删除该文件及其名称

您可以在成功函数中选择window.location.href

$.ajax({
     type: "POST",
     dataType: "json",
     url: "exportLeads.php",
     data: { 'idArray' : ids },
     success: function(data) {
          if (data.success) window.location.href = "/link-to-your-download-script";
     }
}); 

您必须将响应更改为json_encode,并将功能拆分为两个脚本,一个用于导出,另一个用于下载脚本(具有唯一id或其他内容)