修改jQuery脚本用CSV填充HTML表格 本地IIS测试标签页表格为空求排查
脚本无法生成表格的核心问题排查
代码运行后始终显示空表格,是几处明确的语法、逻辑错误直接导致的,逐条说明:
具体问题点
- 等值判断书写错误:代码中写的
if (i=0)是赋值语句,不是等值判断。执行时会把循环索引i强制重置为0,判断结果恒为真,所有数据行都会被当成表头处理,永远不会生成数据内容。 - 表格变量重复覆盖:函数开头已经初始化了全局表格对象,但在每遍历一行数据时,又通过
var table = ...重新创建了一个全新的空表格,之前已经追加到旧表格里的所有内容都会被直接丢弃。 - 表格结构逻辑混乱:每处理一条数据行,都会独立新建一个tbody元素,无法把所有数据行统一挂载到同一个表格结构下,最终生成的表格完全不符合标准结构。
- 请求路径存在风险:Ajax请求写的绝对地址
http://localhost/NV_EuroData.csv,如果IIS站点不是部署在80端口,会直接触发跨域拦截;如果CSV文件不在站点根目录下,还会返回404错误,根本拿不到CSV数据。 - 语义标签错配:表头单元格本该用
th标签实现加粗、居中的默认表头样式,代码里误用了td标签,不符合表格的语义规范。
修正后的可运行代码
<!doctype html> <html lang="zh-CN"> <head> <title>test csvToTable</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <style> .project-tab { padding: 10%; margin-top: -8%; } .project-tab #tabs{ background: #007b5e; color: #eee; } .project-tab #tabs h6.section-title{ color: #eee; } .project-tab #tabs .nav-tabs .nav-item.show .nav-link, .nav-tabs .nav-link.active { color: #0062cc; background-color: transparent; border-color: transparent transparent #f3f3f3; border-bottom: 3px solid !important; font-size: 16px; font-weight: bold; } .project-tab .nav-link { border: 1px solid transparent; border-top-left-radius: .25rem; border-top-right-radius: .25rem; color: #0062cc; font-size: 16px; font-weight: 600; } .project-tab .nav-link:hover { border: none; } .project-tab thead{ background: #f3f3f3; color: #333; } .project-tab a{ text-decoration: none; color: #333; font-weight: 600; } </style> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> </head> <body> <section id="tabs" class="project-tab"> <div class="container"> <div class="row"> <div class="col-md-12"> <nav> <div class="nav nav-tabs nav-fill" id="nav-tab" role="tablist"> <a class="nav-item nav-link active" id="nav-home-tab" data-toggle="tab" href="#nav-home" role="tab" aria-controls="nav-home" aria-selected="true">Project Tab 1</a> <a class="nav-item nav-link" id="nav-profile-tab" data-toggle="tab" href="#nav-profile" role="tab" aria-controls="nav-profile" aria-selected="false">Project Tab 2</a> <a class="nav-item nav-link" id="nav-contact-tab" data-toggle="tab" href="#nav-contact" role="tab" aria-controls="nav-contact" aria-selected="false">Project Tab 3</a> </div> </nav> <div class="tab-content" id="nav-tabContent"> <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab"></div> <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab"></div> <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab"></div> </div> </div> </div> </div> </section> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/4.1.2/papaparse.js"></script> <script> function arrayToTable(tableData) { // 仅初始化一次表格、表头、表体结构,避免变量重复创建 var table = $('<table class="table" cellspacing="0"></table>'); var thead = $('<thead></thead>'); var tbody = $('<tbody id="tEuro"></tbody>'); $(tableData).each(function (i, rowData) { var row = $('<tr class="rownum-' + i + '"></tr>'); // 正确使用等值判断识别表头行 if (i === 0) { $(rowData).each(function (j, cellData) { // 表头单元格使用th标签 row.append($('<th class="col-' + j + '">' + cellData + '</th>')) }); thead.append(row); } else { $(rowData).each(function (j, cellData) { row.append($('<td class="col-' + j + '">' + cellData + '</td>')) }); tbody.append(row); } }); // 统一把表头、表体挂载到表格上 table.append(thead).append(tbody); return table; } $.ajax({ type: "GET", // 使用相对路径请求同目录下的CSV文件,避免跨域、404问题 url: "./NV_EuroData.csv", success: function (data) { $("#nav-home").append(arrayToTable(Papa.parse(data).data)); }, error: function(xhr) { // 控制台输出加载失败原因,方便排查 console.error("CSV文件加载失败,错误状态码:" + xhr.status); } }); </script> </body> </html>
本地测试注意事项
- 把
NV_EuroData.csv文件和HTML页面放在IIS站点的同一目录下,不要使用跨端口的绝对路径发起请求。 - 打开浏览器开发者工具的控制台面板,查看具体报错信息:如果返回404就检查文件路径是否正确,如果返回跨域提示就确认路径是否写对,如果返回403就检查IIS站点的文件权限和MIME类型配置。
- 确认CSV文件的编码格式为UTF-8,避免解析后出现乱码。
内容的提问来源于stack exchange,提问作者Luk7
相关产品推荐
相关产品推荐

