angular - 无法从谷歌表单加载 csv 文件
问题描述
export class TopicComponent {
csvUrl = 'https://docs.google.com/spreadsheets/d/1DEhSS05msJGTV7rIZEPBjYFH_FK2G3o4okWTdi_Xxsc/edit?usp=sharing';
csvData: any [] = [];
constructor(private http: Http) { }
readCsvData() {
this.http.get(this.csvUrl)
.subscribe(
data => this.extractData(data),
err => this.handleError(err)
);
}
private extractData(res: any) {
let csvData = res['_body'] || '';
let allTextLines = csvData.split(/\r\n|\n/);
let headers = allTextLines[0].split(',');
let lines = [];
for ( let i = 0; i < allTextLines.length; i++) {
// split content based on comma
let data = allTextLines[i].split(',');
if (data.length === headers.length) {
let tarr = [];
for ( let j = 0; j < headers.length; j++) {
tarr.push(data[j]);
}
lines.push(tarr);
}
}
this.csvData = lines;
}
private handleError (error: any) {
let errMsg = (error.message) ? error.message :
error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.error(errMsg); // log to console instead
return errMsg;
}
<h2>CSV data</h2>
<div>
<button class="btn btn1 btn2" (click)="readCsvData()">Read Csv Data</button>
</div>
<br/><br/>
<div>
<table border="1" class="demoTable">
<tr *ngFor = "let x of csvData">
<td *ngFor = "let y of x ">{{ y }}</td>
</tr>
</table>
</div>
预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 X-XSRF-TOKEN。
请帮忙!!
解决方案
有同样的问题。就我而言,原因是在我的 Chrome cookie 中保存了 X-XSRF-TOKEN 字段。并且不知何故,Chrome 将标题 'Access-Control-Request-Headers: x-xsrf-token' 添加到 OPTION 请求中。在 Firefox 中,相同的页面可以正常工作,在隐身模式 Chrome 中也是如此。所以我刚刚删除了这个 cookie 字段(X-XSRF-TOKEN),仅此而已。
推荐阅读
- javascript - 如何找到包含在不同数组中的两个值的百分比份额?
- racket - 如何将结构的实例添加到哈希表?我不断收到引用列表
- maven - NoClassDefFoundError:Java 11 中的 javax/xml/bind/JAXBException 但已添加 maven 依赖项
- xml - 针对不同环境转换 Cron Job Time 的 XML Config
- f# - 有没有一种方法可以根据 FIRST 节点拆分 Map 以满足谓词?
- javascript - 尝试在 nodejs 中使用 readfilesync 时,我得到“位置 0 的 JSON 中的意外令牌”
- c# - EF6 Code First - AllowHtml 导致数据库字段可以为空
- reactjs - 当状态对象重新排序时,React 组件会重新挂载
- reactjs - 为什么卸载子组件会显示错误
- javascript - 如何在 p5.js 中导入模型?