解析含多文本项的XML流时代码无输出,请求排查问题
问题排查与修复方案
1. 先修复致命语法错误
你的代码里有一处明显的语法错误,直接导致脚本执行中断,根本无法进入XML解析的逻辑:
if (`your text`title === 'AwayPoints') {
这里的`your text`是多余的无效代码,删掉即可,修正后:
if (title === 'AwayPoints') {
2. 跨域请求(CORS)问题排查
即使修复了语法错误,你大概率会遇到跨域资源共享限制:浏览器会阻止前端脚本直接请求不同域名下的资源,除非目标服务器配置了允许你当前域名的CORS响应头。
你可以打开浏览器开发者工具(F12)→ 控制台标签,查看是否有类似No 'Access-Control-Allow-Origin' header is present on the requested resource的错误提示。
如果遇到CORS问题,可参考以下解决方式:
- 若有权限修改目标服务器,添加
Access-Control-Allow-Origin响应头,允许你的域名访问 - 本地开发时,可使用代理服务器转发请求(比如用Node.js搭建简单代理,或临时关闭Chrome浏览器的跨域限制,仅用于开发测试)
3. 代码健壮性优化
为避免XML结构变化导致脚本崩溃,建议给DOM元素获取添加存在性判断:
for (let i = 0; i < items.length; i++) { const titleElem = items[i].getElementsByTagName('title')[0]; const descElem = items[i].getElementsByTagName('description')[0]; if (!titleElem || !descElem) continue; // 跳过缺少必要节点的item let title = titleElem.textContent; let descript = descElem.textContent; if (title === 'AwayPoints') { descriptionContainer.textContent = descript; break; } }
完整修复后的代码
<!DOCTYPE html> <html> <head> <title>XML Feed </title> <script> function fetchXMLFeed() { fetch('https://solidsports.com.au/scores/Venue_GPS/live/Scores.xml') .then(response => { // 先检查请求是否成功 if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.text(); }) .then(data => { const parser = new DOMParser(); const xmlDoc = parser.parseFromString(data, 'text/xml'); const items = xmlDoc.getElementsByTagName('item'); let descriptionContainer = document.getElementById('description-container'); for (let i = 0; i < items.length; i++) { const titleElem = items[i].getElementsByTagName('title')[0]; const descElem = items[i].getElementsByTagName('description')[0]; if (!titleElem || !descElem) continue; let title = titleElem.textContent; let descript = descElem.textContent; if (title === 'AwayPoints') { descriptionContainer.textContent = descript; break; } } }) .catch(error => { console.error('Error fetching XML feed:', error); // 把错误信息展示到页面,方便调试 document.getElementById('description-container').textContent = `加载失败: ${error.message}`; }); } </script> </head> <body onload="fetchXMLFeed()"> <h2>Description for Item with Title "AwayPoints":</h2> <div id="description-container"></div> </body> </html>
内容的提问来源于stack exchange,提问作者Rob Melloy
相关产品推荐
相关产品推荐

