求助:开发Roblox Asset ID返回器时遇Promise语法错误
问题修复方案
核心错误分析
你碰到的Unexpected end of input错误,根源是这几个问题:
no-cors模式导致无法读取响应:设置mode: 'no-cors'后,浏览器会返回一个无法读取内容的「不透明响应」,调用response.json()自然会解析失败,因为没有可解析的内容。- 异步逻辑顺序错误:
fetch是异步操作,你在请求还没完成时就直接判断assetId的值,此时assetId肯定是undefined,导致直接输出"Invalid Asset ID"。 - 拼写错误:代码里
responce(应为response)、output.innerHTM(应为innerHTML)都是低级拼写错误,会导致功能失效。 - CORS跨域限制:Roblox的这个API默认不允许前端直接跨域请求,即使去掉
no-cors也会触发CORS错误。
修正后的代码
JavaScript代码
async function convert() { const input = document.getElementById("AssetConverterArea").value; const output = document.getElementById("assetIdReturn"); // 先做输入校验,避免无效请求 if (!input || isNaN(input)) { output.innerHTML = "Invalid Asset ID"; return; } try { // 使用CORS代理绕过跨域限制(生产环境建议自行搭建后端中转) const proxyUrl = 'https://api.allorigins.win/get?url='; const targetUrl = encodeURIComponent(`https://api.roblox.com/marketplace/productinfo?assetId=${input}`); const response = await fetch(proxyUrl + targetUrl); const data = await response.json(); // 解析代理返回的原始内容 const assetData = JSON.parse(data.contents); if (assetData.AssetId) { output.innerHTML = `Your asset ID is: ${assetData.AssetId}`; } else { output.innerHTML = "Invalid Asset ID"; } } catch (error) { console.error('请求失败:', error); output.innerHTML = "Failed to retrieve asset ID"; } }
关键修改点
- 改用
async/await简化异步逻辑,确保请求完成后再处理结果。 - 增加输入校验,提前拦截非数字或空输入。
- 引入CORS代理绕过跨域限制(生产环境建议自行搭建后端中转,避免依赖第三方服务)。
- 修正所有拼写错误,规范变量命名。
关于CORS问题的长期解决方案
Roblox官方API大多不支持前端直接跨域请求,推荐两种稳定方案:
- 搭建后端中转服务:用Node.js、Python等语言写一个简单的后端接口,由后端发起请求Roblox API,再把结果返回给前端,彻底规避跨域问题。
- 确认官方支持CORS的接口:查阅Roblox开发者文档,确认是否有支持前端跨域调用的替代API端点。
内容的提问来源于stack exchange,提问作者anoliver
相关产品推荐
相关产品推荐

