如何从指定JSON接口获取订单对象中的products数组?
解决方法
首先先确认接口返回的订单对象里确实包含products数组——你可以查看console.log(tilaus)的输出,检查每个订单对象是否存在这个属性。如果接口确实返回了products,只需要修改代码来渲染这部分内容即可,以下是调整后的代码:
fetch('https://www.cc.puv.fi/~asa/cgi-bin/fetchOrders.py') .then(res => res.json()) // 直接用res.json()处理JSON响应,替代text+parse的组合 .then(tilaukset => tulostus(tilaukset)) function tulostus(tilaukset) { console.log(tilaukset); let a = "<table><tr><th>订单ID</th><th>客户ID</th><th>客户名称</th><th>账单地址</th><th>送货地址</th><th>送货日期</th><th>负责销售</th><th>备注</th><th>总价</th><th>商品信息</th></tr>"; for(let i = 0; i < tilaukset.length; i++) { let tilaus = tilaukset[i]; console.log(tilaus); // 处理订单下的商品列表 let productsHtml = ''; if (tilaus.products && tilaus.products.length > 0) { productsHtml += '<ul>'; tilaus.products.forEach(product => { // 这里的属性名(productid、name、quantity、price)请根据接口实际返回调整 productsHtml += `<li>${product.productid} - ${product.name}:${product.quantity} 件 × ${product.price} 元</li>`; }); productsHtml += '</ul>'; } else { productsHtml = '无关联商品'; } a += `<tr><td>${tilaus.orderid}</td><td>${tilaus.customerid}</td><td>${tilaus.customer}</td><td>${tilaus.invaddr}</td><td>${tilaus.delivaddr}</td><td>${tilaus.deliverydate}</td><td>${tilaus.respsalesperson}</td><td>${tilaus.comment || ''}</td><td>${tilaus.totalprice}</td><td>${productsHtml}</td></tr>`; } console.log(a); document.getElementById('info').innerHTML = a+'</table>'; }
关键调整说明
- 用
res.json()替代了原代码中res.text()+JSON.parse()的写法,这是Fetch API处理JSON响应的标准方式,更简洁高效。 - 新增了“商品信息”列,用来展示每个订单对应的
products数组内容。 - 增加了对
products数组的判空逻辑:如果存在商品数据,就用无序列表展示每个商品的详情;如果没有商品,显示提示文本。
如果检查后发现接口根本没有返回products数组,那你需要确认该接口是否支持返回包含商品的完整订单数据——可能需要查看接口文档,或者联系后端开发确认是否需要传递额外参数来获取商品信息。
内容的提问来源于stack exchange,提问作者Lakeri Kenkä
相关产品推荐
相关产品推荐

