Ajax 调用和函数.apply infinite loop.

Ajax call and function.apply infinite loop

本文关键字:infinite loop apply 函数 调用 Ajax      更新时间:2023-09-26

我正在尝试打印一个 .我为此目的构建的 Web 应用程序中的 CSV 我有一个链接,很简单:

<a class="areaSummaryExport" value="1">...</a>

然后使用Javascript和JQuery,我做到了:

$('.areaSummaryExport').on('click', function(){
    exportAreaSummary($(this).attr('value'), $(this));
});

要导出 .CSV 与 JQuery 我需要一个<table>所以我使用 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');
        exportAreaSummary.apply(this, [data.table, data.name, data.header])
    }).error(function(XMLHttpRequest){
        console.log('error');
        console.log(XMLHttpRequest);
    });
}

当我取回它时,我"应用"这个函数来创建和下载它:

function exportTableToCSV($table, filename, header) {
    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'
    });
}

最后一个函数在其他地方完美运行,但表格已经在页面中,所以我不必使用任何 ajax。这里的表不应该在页面中,所以我使用 ajax 获取它,然后将其发送给exportTableToCSV().但是(我不确定为什么)它进入无限循环,直到服务器崩溃(上次有 2000+ 次调用服务器)。

有谁知道为什么会发生这种情况以及如何解决它?任何其他方法也对我有用。

你是在成功中称exportAreaSummary而不是exportTableToCSV

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($(data.table), data.name, data.header)
    }).error(function(XMLHttpRequest){
        console.log('error');
        console.log(XMLHttpRequest);
    });
}