[使用Wikipedia的opensearch api时,井号标签不会填充数据列表。为什么?

问题描述 投票:1回答:1
$.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);
    }
});

Difference between hashtag symbol from wikipedia search api and local server

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

edit:localhost,我的意思是我将端点更改为服务器,所以我可以看到如果我将带有哈希标签的选项列表发回去会发生什么。它工作正常,我注意到服务器发送的主题标签与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(search),但是没有区别。

javascript json wikipedia-api mediawiki-api opensearch
1个回答
0
投票

问题是Wikipedia article titles cannot contain a # character。显然,有些人很有创造力,而是使用#来规避此限制。

相应地,FULLWIDTH NUMBER SIGN 将找到,但是您正在使用的normal search似乎在进行一些可识别Unicode的模糊匹配,并返回以only a single accurate result for #开头的页面。 #不会考虑这些。

© www.soinside.com 2019 - 2024. All rights reserved.