原生JS如何解析JSON商品数据 渲染到已搭建的轮播组件
代码现存问题梳理
- JSON本身存在语法错误:你给出的结构示例中
itemsData数组内多嵌套了一层重复的对象左括号,写为"itemsData": [{ { ... } ],这种格式无法通过JSON解析校验,会直接触发解析失败。 - XMLHttpRequest配置错误:代码中
request.responseText = 'json'属于完全无效的赋值操作,既不会改变响应内容,也不会实现响应自动转对象的效果。XMLHttpRequest设置响应类型的正确属性是responseType,而非手动修改responseText的值。 - 数据层级取错:所有商品数据是存放在JSON响应的
itemsData属性下的数组,你当前代码拿到解析后的整个JSON对象后,直接对根对象做循环遍历,根本无法触达内层的商品列表,自然拿不到目标字段值。 - 渲染逻辑缺失字段映射:当前的渲染代码仅处理了标题、价格两个字段,没有按照需求把商品跳转链接、商品图片绑定到对应HTML标签上,无法完成完整的商品卡片渲染。
修正后的实现代码
首先是符合语法校验的标准JSON结构:
{ "itemsData": [ { "productUrl": "hdhdhdhdh.html", "imageSrc": "image.jpg", "productTitle": "sksksksksk", "price": "8383838" } ] }
对应修正后的请求与渲染逻辑代码:
const request = new XMLHttpRequest(); request.open('GET', 'myJson.json'); // 正确指定响应类型,浏览器会自动将返回内容解析为JSON对象 request.responseType = 'json'; request.onload = function () { // 直接获取解析完成的响应对象,无需手动调用JSON.parse const responseData = this.response; // 从itemsData属性中取出商品数组 const goodsList = responseData.itemsData; const carouselContainer = document.getElementById('carousel'); let renderHtml = ''; // 遍历商品数组,逐字段映射生成对应的轮播项HTML for (let i = 0; i < goodsList.length; i++) { const goods = goodsList[i]; renderHtml += ` <li class="carousel-seat"> <a href="${goods.productUrl}" class="goods-card"> <img src="${goods.imageSrc}" alt="${goods.productTitle}" class="goods-cover" > <h4 class="goods-name">${goods.productTitle}</h4> <p class="goods-price">Price: ${goods.price}</p> </a> </li> ` } carouselContainer.innerHTML = renderHtml; } request.send();
字段与HTML标签的对应规则
productUrl:赋值给<a>标签的href属性,实现点击卡片跳转商品详情的功能imageSrc:赋值给<img>标签的src属性,加载对应商品的展示图productTitle:一方面赋值给商品标题<h4>的文本内容,另一方面作为图片的alt文本,提升页面可访问性price:赋值给价格段落的文本位置,渲染商品售价信息
内容的提问来源于stack exchange,提问作者user173420
相关产品推荐
相关产品推荐

