使用维基百科的opensearch api时,主题标签符号不会填充数据列表。为什么?


$.ajax({
url: "https://en.wikipedia.org/w/api.php",
dataType: "jsonp",
data: {
'action': "opensearch",
'format': "json",
'search': search
},
success: function (data) {
var suggestions = '';
data[1].forEach(d => {
suggestions += `<option value="${d}">`;
});
console.log(data);
$('#searchList').html(suggestions);
console.log(suggestions);
}
});

来自维基百科搜索 API 和本地服务器的主题标签符号之间的区别

换句话说,数据列表通常使用其他字符(包括@或$(填充,但是当使用#时,即使数据列表在检查元素时填充了正确的项目,它也不会下拉并显示建议。

编辑:通过本地主机,我的意思是我将端点更改为我的服务器,以便我可以看到如果我发回带有主题标签的选项列表会发生什么。它工作正常,我注意到我的服务器与 wiki 的 opensearch 发送的主题标签之间的字体不同。

编辑:搜索变量来自输入框,如下所示-

<form class="pSearch form-inline" method="post" action="">
<input class="pSearch" type="text" id="searchTerm" name="searchTerms" placeholder="Search" aria-label="Search" 
list="searchList" autocomplete="off" spellcheck="true">
<datalist id="searchList"></datalist>

我使用键控功能侦听输入-

$('#searchTerm').keyup(function (e) {
var search = $(this).val();

然后我将变量搜索发送到 opensearch api-

$.ajax({...})
}

硬编码主题标签而不是使用变量可以正常工作 - "#"。我尝试了JSON.stringify(搜索(,但它没有区别。

问题是维基百科条目标题不能包含#字符。显然,有些人发挥了创造力,而是使用全角数字符号来规避此限制。

相应地,正常的搜索只会找到一个准确的结果#,但是您正在使用的Opensearch API似乎执行了一些Unicode感知模糊匹配并返回以开头的页面。然而,<datalist>不会考虑这些。

最新更新