如果 CSV 和包含 JavaScript 的文档是从同一来源提供的,您当然可以这样做。(更多:同源政策)
您将使用XMLHttpRequest
object检索数据,这会将其作为文本返回给您。然后,根据 CSV 数据的复杂性,它可以像使用String#split
( spec , MDN ) 获取行(行)数组一样简单,然后String#split
在循环中再次使用以获取每行的值数组. 我说“取决于复杂性”,因为 CSV 是一种比人们有时怀疑的更复杂的格式,涉及可以包含换行符和逗号的引用单元格。但是,如果您的数据不使用这些功能,只需几次split
调用就可以解决问题。如果您的数据确实使用了更多功能,您可能需要找到一个库来处理对完整 RFC的解析。
这是一个完整的示例:Live Copy | 直播源
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Load CSV</title>
</head>
<body>
<script>
(function() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = handleStateChange;
xhr.open("GET", "http://jsbin.com/ocuqog/1");
xhr.send();
display("Request sent");
function handleStateChange() {
if (xhr.readyState == 4 &&
xhr.status >= 200 &&
xhr.status < 300) {
display("Got response");
showData(xhr.responseText);
}
}
function showData(data) {
var rows = data.split(/\s+/);
var rowNum;
var cells;
var cellNum;
for (rowNum = 0; rowNum < rows.length; ++rowNum) {
cells = rows[rowNum].split(",");
display("row " + rowNum +
" has " + cells.length + " values(s)");
display("row " + rowNum + "'s first value is " +
cells[0]);
}
}
function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
})();
</script>
</body>
</html>