我正在使用连接到Express API服务器的ReactJS前端构建应用程序.使用Ajax调用API.
在我的一个视图中,表格在每行上加载"导出"链接.导出链接指向一个React路由,该路由调用API端点,该端点提供要下载的CSV文件.
如果我直接使用有效请求(在React应用程序之外)命中API端点,则会在浏览器中启动文件下载.完善!但是,在React页面的Export链接后,尝试加载发生API调用的视图.该表从视图中消失,并被文件内容替换(为了证明我有数据),但没有下载文件.
我可以强制下载响应对象的内容作为文件吗?这可能发生在ajax成功回调中吗?我尝试使用javascript,但我正在努力使用React虚拟DOM ...我认为这一定非常直接,但我很难过.
编辑:@Blex的评论帮助我解决了这个问题!该解决方案已添加到代码段中...
这是接收数据的JSX:
module.exports = React.createClass({
mixins: [Router.State],
getInitialState: function() {
return {
auth: getAuthState(),
export: [],
passedParams: this.getParams()
};
},
componentDidMount: function(){
$.ajax({
type: 'GET',
url: ''+ API_URL +'/path/to/endpoint'+ this.state.passedParams.id +'/export',
dataType: 'text',
headers: {
'Authorization': 'Basic ' + this.state.auth.base + ''
},
success: function (res) {
// can I force a download of res here?
console.log('Export Result Success -- ', res);
if(this.isMounted()){
console.log('Export Download Data -- ', res);
this.setState({export: res[1]});
// adding the …Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用固定数据网格.
https://facebook.github.io/fixed-data-table/example-sort.html
我想采用csv和pdf报告.是否可以直接将网格数据导出为pdf或csv?或者,如何使用datagrid的数据提供程序(JSON数组)获取csv和pdf报告?
我想使用html5和javascript或jquery从chrome(所有版本)写入任何文件的txt.
我尝试过FileSystem API,我试过的代码是:
function onFs(fs) {
console.log('test');
fs.root.getFile('log.txt', {create: true, exclusive: true},
function(fileEntry) {
// fileEntry.isFile === true
// fileEntry.name == 'log.txt'
// fileEntry.fullPath == '/log.txt'
fileEntry.getMetaData(function(md) {
console.log(md.modificationTime.toDateString());
}, onError);
},
onError
);
}
window.webkitRequestFileSystem(TEMPORARY, 1024*1024 /*1MB*/, onFs);
但不行.
有没有办法写入文件?
我使用以下代码在 JavaScript 中保存文件:
var a = document.createElement('a');
a.href = URL.createObjectURL(new Blob(['SOME DATA']));
a.download = 'some.dat';
a.click();
Run Code Online (Sandbox Code Playgroud)
我想在下载文件后撤销 URL(使用 URL.revokeObjectURL)。什么时候这样做是安全的?
我可以在调用后立即撤销它吗a.click()(这似乎有效,但我不确定它是否安全)?ina的点击事件监听器?有没有办法让点击事件监听器在默认操作之后运行?
我正在使用插件从表生成csv文件,文件正在下载带有"下载"文件名,如何更改文件名,例如dowload.csv
var csv = $("#table").table2CSV({delivery:'download'});
window.location.href = 'data:text/csv;charset=UTF-8,'+ encodeURIComponent(csv);
Run Code Online (Sandbox Code Playgroud) 我有一个嵌套对象的数组,例如:
[
{"name": "1", "children": [{"name": "1.1", "children":"1.2"}]},
{"id": "2", "thing": [{"name": "2.1", "children":"2.2"}]},
{"name": "3", "stuff": [{"name": "3.1", "children":"3.2"}]},
]
Run Code Online (Sandbox Code Playgroud)
对象可以包含不同类型的值,包括其他嵌套对象.
我想将此数组转换为CSV格式.
我试图用for .. in循环,常规嵌套for循环.map()和递归进行迭代.我认为递归可能是解决这个特定问题的唯一方法.对于CSV字段名称,我想使用导致该值的键序列.
对于给定的示例,我正在寻找的CSV结果是:
name, children.name, children.children,id, thing.name, thing.children, stuff.name, stuff.children
1, 1.1, 1.2,
,,,2,2.1,2.2
3,,,,3,3.1,3.2
Run Code Online (Sandbox Code Playgroud)