【问题标题】:Select2 not showing results in dropdown with AJAXSelect2 未在 AJAX 下拉列表中显示结果
【发布时间】:2017-05-02 16:41:57
【问题描述】:

我正在为我正在开发的某个系统创建一个接口,我需要围绕系统中其他地方使用的预先存在的 PHP AJAX 函数编写 Javascript(纯粹是作为我们数据库的人)太忙了,无法根据我的需要调整代码)。

使用 Select2 我需要创建一个选择字段,用户可以在其中搜索他们在数据库中的姓名并选择与之匹配的名称,以便稍后将其发布到另一个 AJAX 函数。我使用以下代码完成了此操作:

//<select id="sltMyName" style="width: 100%;"></select>

    $("#sltMyName").select2({
      ajax: {
          type: "POST",
          url: "includes/php/report_searchPlayers.php",
          delay: 250,
          data: function (params) {
              return {
                  q: params.term // search term
              };
          },
          processResults: function (data) {
                console.log({ results: data.split(",") });
                return { results: data.split(",") };
          }
      },
      minimumInputLength: 1
    });

这应该会将name1,name2,name3,name... 格式的返回字符串转换为Select2 显示所需的格式,但是,它目前不起作用。下拉列表只是显示为空白。

我看到一些关于 text 和 id 属性的问题,但是,它们都在返回的 JSON 字符串的上下文中,所以我不确定这里是否需要它们以及如何在这种情况下使用它们.此外,我在文档中找不到任何这些内容。

有什么建议吗?提前致谢。

返回的数据: Tommy,Jak_Tommy_Lee_Jones,Tommy_Shelby,Tommy_Balboner,TommyCZ,GA_Tommy,VA_Tommy,Tommy_Skrattar,Tommy_Knocker,Tommy_of_Elektro,Tommy_the_Destroyer,Old_Tommy,tommy_of_house_shelby,TommyDermo,TommyC,TommyCash_CZ,Tommyb69k,SA_Tommy,tommyfaster,Tommy_See,Tommy_de_Destroyer,Tommy_of_Whiteroses,TommyShelby,Templar_Intiate_Tommy,Templar_Initiate_Tommy,tommysuckspp,Tommy_the_Overweight

【问题讨论】:

  • 能否提供一个 php 文件中的示例数据?
  • 我已在问题中添加了从 PHP 函数返回的数据。除非我确切知道需要做什么,否则我无法真正调整 PHP 函数,因为我目前无法访问该函数,并且必须通过其他人来完成。
  • 您使用的是哪个版本的 Select2?我会尽力帮助完成这项工作。
  • 我正在使用 Select2 4.0.3。
  • 就我而言,这是 z-index 的问题。将其设置为比我所在的 div 更高的值就足够了。

标签: javascript ajax jquery-select2


【解决方案1】:

我想我已经明白了。主要问题是Select2 想要使用的数据需要是一个对象数组,其中至少有一个名为id 的属性和一个名为text 的属性。在processResults 函数中,只需创建这些对象,然后下拉列表将使用您的 URL 中的数据填充!

我注意到它会在我输入时尝试过滤数据,但由于我传入的 url 不接受参数,它每次只返回相同的数据。如果您需要更强大的示例,请告诉我。

请参阅我在https://jsfiddle.net/yp0rp2kw/3/ 的小提琴以获取可行的解决方案。

【讨论】:

  • 是的,这似乎有效,谢谢。我使用了您的解决方案,但是使用了 Jquery 的 map 函数来创建对象,如下所示:processResults: function (data) { return { results: $.map(data.split(","), function (item) { return { text: item, id: item } }) }; }
  • 工作正常。谢谢老兄!
猜你喜欢
  • 2016-03-22
  • 2016-09-11
  • 2013-06-12
  • 1970-01-01
  • 2012-11-01
  • 2016-04-05
  • 2016-04-10
  • 2014-07-04
  • 1970-01-01
相关资源
最近更新 更多