【问题标题】:Run javascript function then post for download运行javascript函数然后发布下载
【发布时间】:2013-07-04 13:33:34
【问题描述】:

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

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

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

php:我使用了这个Export to CSV via PHP question。该功能已正确实现,我没有收到任何错误。只是没有提示下载的文件。

$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下载文件。
  • @Musa 是的,我的问题是,我如何在新窗口中打开我的脚本或制作它以便提示用户下载文件。我需要使用 ajax 将我的数据发送到脚本中。
  • 如何将window.location.href设置为以数据为查询字符串的url。

标签: php javascript jquery


【解决方案1】:

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

Download a file by 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"
    ) );
  }
?>

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您可以在成功函数中使用 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 或...)

      【讨论】:

      • 由于某种原因,这永远不会进入 if 语句。我需要在我的 php 脚本中返回一些东西吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      相关资源
      最近更新 更多