谢谢分享!现在它在没有警告信息的情况下正常工作了。
我遇到了另一个问题,我在下面提到了:
关于这个问题,我问了 ChatGPT,它(因为我不是开发者)回答说:
显示 ChatGPT 的消息
这个问题很可能源于你从 URL 中提取 topicId 的方式:
const topicId = url.split('/')[2];
如果你的 URL 包含更复杂的模式(例如带有空格、特殊字符或非标准 slug 的标题),这种简单的分割方法将无法可靠地获取正确的 topic ID。
为什么这会导致问题:
- 像
/t/3ple-2015-2019-title/12345这样的 URL,数字 topic ID 位于末尾,但你的代码假设 topic ID 始终是第三个部分。 - 如果你的 URL 结构不同,有时你会获取到 slug 或标题的一部分,而不是 ID。
- 这会破坏你的 AJAX 请求 (
/t/${topicId}.json),因为你可能会发送一个无效的 topic ID 或 slug,导致返回不正确或默认的类别信息(例如“General”)。
如何修复:
使用更可靠的方法从 URL 中提取 topic ID:
- 从 URL 的最后一个数字部分提取 topic ID。
Discourse 的 topic URL 通常看起来像 /t/{slug}/{id},例如:
/t/3ple-2015-2019-title/12345
这里的 12345 是 topic ID。
替换这个:
const topicId = url.split('/')[2];
用这个:
const segments = url.split('/').filter(Boolean);
const topicId = segments[segments.length - 1]; // 最后一个部分,预计是数字 ID
为了更安全,请验证 topicId 是一个数字:
if (!/^\\d+$/.test(topicId)) {
console.error("从 URL 中提取的 topic ID 无效:", topicId);
return; // 停止执行
}
总结:在 updateBreadcrumbs 中将你的代码片段更新为如下:
if (url.includes('/t/')) {
const segments = url.split('/').filter(Boolean);
const topicId = segments[segments.length - 1];
if (!/^\\d+$/.test(topicId)) {
console.error("从 URL 中提取的 topic ID 无效:", topicId);
return;
}
// 然后继续使用 topicId 进行 AJAX 调用
}
这样,无论 URL 中的标题是否复杂或包含空格,你都能始终获取到数字 topic ID,从而修复面包屑类别和路径查找问题。
您能帮忙修复这个问题吗?
提前感谢!![]()