Jquery 如何使用自己的数据正确下载CSV?

Jquery 如何使用自己的数据正确下载CSV?,jquery,string,csv,download,Jquery,String,Csv,Download,我有一个我正在编写的小插件,它基本上从facebook API中提取信息,循环,从我想要的数据中创建一个格式化字符串,并在运行后强制下载。然而,据我所知,我正在正确格式化字符串,但除非我很愚蠢,否则我无法打开csv,很可能是这样 演示: 但是,这里有一个非常简单的示例,我如何格式化我的响应我正在格式化我的响应: var string = "a","b","c","d","e","f","etc"; 据我所知,这是csv文件所期望的,但当我将该信息强制输入窗口时,它甚至无法工作。请在小提琴顶部附

我有一个我正在编写的小插件,它基本上从facebook API中提取信息,循环,从我想要的数据中创建一个格式化字符串,并在运行后强制下载。然而,据我所知,我正在正确格式化字符串,但除非我很愚蠢,否则我无法打开csv,很可能是这样

演示:

但是,这里有一个非常简单的示例,我如何格式化我的响应我正在格式化我的响应:

var string = "a","b","c","d","e","f","etc";
据我所知,这是csv文件所期望的,但当我将该信息强制输入窗口时,它甚至无法工作。请在小提琴顶部附近使用open命令,而不是将自定义字符串传递给它

我知道这是一个相当大的代码块,但我不确定我还能在这里做什么

即使我运行:window.opendata:text/csv;charset=utf-8,+escapea、b、c、d、e、f等直接下载并打开csv,但没有数据


任何帮助都会很好

您有两个问题:

1您下载得太早了。FBAPI调用是ajax aynch调用,所以只有在成功后才需要下载

2检查response.length,response是一个对象,它没有length属性

3使用window.open下载csv,您可以尝试使用HTML5锚下载属性

您可以通过以下方式进行操作:

for (var i = 0; i < ids.length; i++) {
    FB.api(ids[i], 'get', function (response) {
        if (response) {
            //csvString = toCsv(response);   
            csvString += (hasRun == false ? getArrayValue(response, true) : getArrayValue(response, false));
            console.log(csvString);
            hasRun == true;

        }

        $('#keys').html(csvString);
           var tmpAnc=document.createElement('a');
           tmpAnc.textContent='download';
           tmpAnc.download="myFileName.csv";
           tmpAnc.href='data:text/csv;charset=utf-8,'+escape(csvString);
           tmpAnc.click();

    });
    //updateprogressBar(i + 1, ids.length);
}

您有两个问题:

1您下载得太早了。FBAPI调用是ajax aynch调用,所以只有在成功后才需要下载

2检查response.length,response是一个对象,它没有length属性

3使用window.open下载csv,您可以尝试使用HTML5锚下载属性

您可以通过以下方式进行操作:

for (var i = 0; i < ids.length; i++) {
    FB.api(ids[i], 'get', function (response) {
        if (response) {
            //csvString = toCsv(response);   
            csvString += (hasRun == false ? getArrayValue(response, true) : getArrayValue(response, false));
            console.log(csvString);
            hasRun == true;

        }

        $('#keys').html(csvString);
           var tmpAnc=document.createElement('a');
           tmpAnc.textContent='download';
           tmpAnc.download="myFileName.csv";
           tmpAnc.href='data:text/csv;charset=utf-8,'+escape(csvString);
           tmpAnc.click();

    });
    //updateprogressBar(i + 1, ids.length);
}

如果您使用的是口音,请考虑PuffEnter UFFEF

我用上面的文字做了一些小改动。这是因为如果没有这个,你就没有BOM的UTF-8,如果你添加了这个,它将适用于pt br和其他使用重音符号的语言


tmpAnc.href='data:text/csv;字符集=utf-8、\ufeff'+escapecsvString

> P >如果你使用重音,请考虑Prime\UFFEF

我用上面的文字做了一些小改动。这是因为如果没有这个,你就没有BOM的UTF-8,如果你添加了这个,它将适用于pt br和其他使用重音符号的语言


tmpAnc.href='data:text/csv;字符集=utf-8、\ufeff'+escapecsvString

啊,当然,非常感谢,新台词应该很简单:再次感谢!你介意我问一下window.open命令和创建锚的方式有什么区别吗?@ShannonHochkins这是我第一次从客户端下载真正的文件。不知何故,window.open不起作用。所以尝试了这个选项创建一个临时锚标记,但仍然有效,只需在不同的浏览器中检查一次。@ShannonHochkins让我用window.open玩arnd,它似乎在更改某些内容后没有下载文件,但没有文件名…好的,我现在遇到的问题是,这是因为我需要多次调用'FB'api,以便不断添加到变量csvString,它会反复尝试下载文件,而不是生成字符串,然后再下载,你能想出一个方法让它工作吗?啊,当然,非常感谢,新台词应该很简单:再次感谢!你介意我问一下window.open命令和创建锚的方式有什么区别吗?@ShannonHochkins这是我第一次从客户端下载真正的文件。不知何故,window.open不起作用。所以尝试了这个选项创建一个临时锚标记,但仍然有效,只需在不同的浏览器中检查一次。@ShannonHochkins让我用window.open玩arnd,它似乎在更改某些内容后没有下载文件,但没有文件名…好的,我现在遇到的问题是,这是因为我需要多次调用'FB'api,以便不断添加到变量csvString,它会反复尝试下载文件,而不是生成字符串,然后再下载,你能想出一个方法让它工作吗?