使用php和ajax生成并下载CSV文件

时间:2017-12-29 00:03:25

标签: javascript php jquery ajax csv

我有一个@implementation NSUUID ( Compare ) - ( NSComparisonResult ) compare : ( NSUUID * ) that { uuid_t x; uuid_t y; [ self getUUIDBytes : x ]; [ that getUUIDBytes : y ]; const int r = memcmp ( x, y, sizeof ( x ) ); if ( r < 0 ) return NSOrderedAscending; if ( r > 0 ) return NSOrderedDescending; return NSOrderedSame; } @end 页面,可以创建一个CSV文件,然后由浏览器自动下载。这是一个包含样本数据的版本 - 效果很好。

php

我希望能够使用<?php $cars = array( array("Volvo",22,18), array("BMW",15,13), array("Saab",5,2), array("Land Rover",17,15) ); // output headers so that the file is downloaded rather than displayed header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=csvfile.csv'); // create a file pointer connected to the output stream $output = fopen('php://output', 'w'); // output the column headings fputcsv($output, array('Car', 'Year', 'Miles' )); //Loop through the array and add to the csv foreach ($cars as $row) { fputcsv($output, $row); } ?> 从其他页面运行此功能,以便用户无需离开主页即可生成/下载ajax。这是我在主页面上使用的csv。在我的真实页面中,我使用的是来自ajax的数据。

JavaScript

当我单击按钮触发脚本时,它会运行,但不会保存/下载到$('button[name="exportCSVButton"]').on('click', function() { console.log('click'); $.ajax({ url: 'exportCSV.php', type: 'post', dataType: 'html', data: { Year: $('input[name="exportYear"]').val() }, success: function(data) { var result = data console.log(result); } }); }); ,而是将整个内容打印到控制台。有什么方法可以实现我想要的吗?没有实际将文件保存到服务器并重新打开。

3 个答案:

答案 0 :(得分:2)

替换console.log(结果);使用文件保存代码。 点击这里JavaScript: Create and save file

使用浏览器对话框保存文件的最佳方法,使用简单的代码。

<a href="#" onclick="window.open('exportCSV.php?year=' + $('input[name="exportYear"]').val())" >Download File</a>

答案 1 :(得分:0)

我之前通过创建隐藏的iframe 来做到这一点,并且通过javascript将iframe的源设置为php文件,该文件在exportCSV.php中发送了相应的标头和数据。

但是,如果您不喜欢这个想法,可以使用像jQuery File DownloadFileSaver.js这样的库

答案 2 :(得分:0)

我已经通过ajax下载了csv文件

  

PHP代码

    <?php
         function outputCsv( $assocDataArray ) {

            if ( !empty( $assocDataArray ) ):

                $fp = fopen( 'php://output', 'w' );
                fputcsv( $fp, array_keys( reset($assocDataArray) ) );

                foreach ( $assocDataArray AS $values ):
                    fputcsv( $fp, $values );
                endforeach;

                fclose( $fp );
            endif;

            exit();
        }

        function generateCsv(){
            $res_prods = $wpdb->get_results( "SELECT * FROM `{$wpdb->prefix}products` ", OBJECT );

            $products= [];
            foreach ($res_prods as $key => $product) :
                $product_id = $product->ID;

                $products[$product_id]['product_id'] = $product_id;
                $products[$product_id]['name'] = $product->name;
            endforeach;

            return outputCsv( $products);
      }
  

jQuery AJAX

jQuery(document).on( 'click', '.btn_generate_product', function(e) {

    var product_id = jQuery(this).data('product_id');

    jQuery.ajax({
        url : "ajaxurl", 
        type: 'POST',
        data: { product_id },
        success: function(data){

              /*
               * Make CSV downloadable
               */
              var downloadLink = document.createElement("a");
              var fileData = ['\ufeff'+data];

              var blobObject = new Blob(fileData,{
                 type: "text/csv;charset=utf-8;"
               });

              var url = URL.createObjectURL(blobObject);
              downloadLink.href = url;
              downloadLink.download = "products.csv";

              /*
               * Actually download CSV
               */
              document.body.appendChild(downloadLink);
              downloadLink.click();
              document.body.removeChild(downloadLink);

        }
    });
});