Javascript 当使用JQuery通过Ajax请求时,文件未被下载

Javascript 当使用JQuery通过Ajax请求时,文件未被下载,javascript,jquery,ajax,file,csv,Javascript,Jquery,Ajax,File,Csv,我需要从网站下载一个包含特定信息的.CSV文件,因此我使用一个链接和一些Javascript/JQuery从servr获取表并创建该文件 我有一个链接,应该在单击时下载该文件: … 然后我在一个JS文件中有这个: 这会将单击侦听器添加到链接: $('.areaSummaryExport').on('click', function(){ exportAreaSummary($(this).attr('value'), $(this)); }); 此函数使用ajax请求从服务器获取表,并

我需要从网站下载一个包含特定信息的.CSV文件,因此我使用一个链接和一些Javascript/JQuery从servr获取表并创建该文件

我有一个链接,应该在单击时下载该文件:

然后我在一个JS文件中有这个:

这会将单击侦听器添加到链接:

$('.areaSummaryExport').on('click', function(){
    exportAreaSummary($(this).attr('value'), $(this));
});
此函数使用ajax请求从服务器获取表,并将其发送到相应的函数进行处理:

function exportAreaSummary(selected, sender){
    $.ajax({
        url: 'admin_ajax.php',
        method: 'get',
        dataType: 'json',
        data: {action: 'exportAreaSummary', area: selected}
    }).done(function(data){
        console.log('done');
        exportTableToCSV.apply(sender, [$($(data.table)[0]), data.name, data.header]);
    }).error(function(XMLHttpRequest){
        console.log('error');
        console.log(XMLHttpRequest);
    });
}
最后,此函数将
href
属性添加到包含要下载的文件信息的链接中:

function exportTableToCSV($table, filename, header) {
    console.log('printing');
    var $rows = $table.find('tr:has(td),tr:has(th)'),

        // Temporary delimiter characters unlikely to be typed by keyboard
        // This is to avoid accidentally splitting the actual contents
        tmpColDelim = String.fromCharCode(11), // vertical tab character
        tmpRowDelim = String.fromCharCode(0), // null character

        // actual delimiter characters for CSV format
        colDelim = '","',
        rowDelim = '"\r\n"',

        // Grab text from table into CSV formatted string
        csv = '"' + 'sep=,' + rowDelim +
        (header? header.join(colDelim) + rowDelim : '') +
        $rows.map(function (i, row) {
            var $row = $(row),
                $cols = $row.find('td, th');

            return $cols.map(function (j, col) {
                var $col = $(col),
                    text = $col.text();

                return text.replace(/"/g, '""'); // escape double quotes

            }).get().join(tmpColDelim);

        }).get().join(tmpRowDelim)
            .split(tmpRowDelim).join(rowDelim)
            .split(tmpColDelim).join(colDelim) + '"',

        // Data URI
        csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv);
    $(this)
        .attr({
        'download': filename,
            'href': csvData,
            'target': '_blank'
    });
    console.log('printed');
}
问题是它获取CSV文件的信息并将其添加到链接的
href
属性中,但它不会下载该文件(我必须再次单击才能使其工作)

我知道最后一个函数可以工作,因为我在其他地方使用它,但是在那里我已经在屏幕上有了表,所以没有涉及ajax。所以我猜问题在于ajax,但不确定在哪里


我还尝试通过JS触发单击事件,但也不起作用。

我建议您在服务器端PHP程序中创建CSV,并将内容类型设置为“application/vnd.ms excel”(或“text/CSV”并设置“Content Disposition:attachment;[yourfilename]”

参考此

参考此

简单地说,超链接是

<a class="areaSummaryExport" href="admin_ajax.php" value="1">...</a>


当然,当你第一次点击它的附加href时,从那时起,只有它会下载。我以前试过,但不太明白怎么做。我创建了一个新的php文件,发送了一个请求,在php中,我
echo
ed在CSV中添加了我想要的内容。现在im
console.log
ing它,我看不到任何文件。。我应该做什么不同的事情呢?不要用ajax编写代码,只需保留带有href=“download.php”的超链接即可。它会下载,如果你需要帮助,请邀请我聊天