【问题标题】:Select2 ajax not showing resultsSelect2 ajax不显示结果
【发布时间】:2016-04-10 23:18:05
【问题描述】:

我正在使用 select2 和 ajax 在我的数据库中查询某个分类下的术语,但是当我搜索搜索框时,它只是挂在“搜索”上而没有检索到任何结果。

这是我的 html

<select multiple="" name="regions1[]" id="regions1" class="job-manager-multiselect select2-hidden-accessible" required="" tabindex="-1" aria-hidden="true"></select>

我的 jquery:

<script>
jQuery(function($) {
$(document).ready(function() {
$( "#regions1" ).select2({        
ajax: {
    url: "/ajax/connect.php",
    dataType: 'json',
    delay: 250,
    data: function (params) {
        return {
            q: params.term // search term
        };
    },
    processResults: function (data) {
        // parse the results into the format expected by Select2.
        // since we are using custom formatting functions we do not need to
        // alter the remote JSON data
        return {
            results: data
        };
    },
    cache: true
},
minimumInputLength: 2
  });
  });
   });
 </script>

和我的 php 代码查询数据库,我正在寻找分类法“job_listing_region”下的所有术语名称

<?php

  $servername = "localhost";
  $username = "myusername";
  $password = "mypassword";

   try {
$conn = new PDO("mysql:host=$servername;dbname=mydatabase", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   }
    catch(PDOException $e)
   {
   echo "Connection failed: " . $e->getMessage();
   }



  // strip tags may not be the best method for your project to apply extra 
   layer of security but fits needs for this tutorial 
   $search = strip_tags(trim($_GET['q'])); 

 // Do Prepared Query
   $query = $conn->prepare("
   SELECT * FROM (
    SELECT wp_terms.name
   FROM wp_terms
   JOIN wp_term_taxonomy
    ON wp_term_taxonomy.term_id = wp_terms.term_id
    WHERE taxonomy = 'job_listing_region'
    AND count = 0
    ) as T"
     );

    // Add a wildcard search to the search variable
     $query->execute(array(':search'=>"%".$search."%"));


   // Do a quick fetchall on the results
    $list = $query->fetchall(PDO::FETCH_ASSOC);

   // Make sure we have a result
   if(count($list) > 0){
    foreach ($list as $key => $value) {
    $data[] = array('id' => $value['name'], 'text' => $value['name']);              
   } 
    } else {
   $data[] = array('id' => '0', 'text' => 'No Products Found');
   }


// return the result in json
echo json_encode($data);

如您所见,我正在检索我的数据,但搜索只是挂起。

提前致谢。

【问题讨论】:

  • 尝试将这个:processResults 改为:success
  • 你在使用索引吗?
  • 在 phpmyadmin 上手动运行您的查询是运行速度快还是 nt
  • @DerekPollard 我试过了,没用。
  • @devpro,是的,当我通过 phpmyadmin 运行查询时,查询正在运行

标签: php jquery mysql ajax jquery-select2


【解决方案1】:

在这里找到解决方案How to load JSON data to use it with select2 plugin

需要像这样重新创建我的结果

processResults: function (data) {
return {
    results: $.map(data, function(obj) {
        return { id: obj.id, text: obj.text };
    })
};
}

【讨论】:

    【解决方案2】:

    所以您需要将processResults 更改为success 并将以下内容放入该函数中:

    for(i=0;1<data.length;++i){
       var currentObject = data[i];
       var id = currentObject.id;
       var text = currentObject.text;
       //do what you need to here (Put things in a div, etc)
    }
    

    从那里,您可以执行以下操作:

    document.getElementById("search").innerHTML = document.getElementById("search").innerHTML+"<br />"+id+text;
    

    【讨论】:

    • 谢谢!只是为了澄清一下,“搜索”应该替换为选择正确的 id 吗?
    • 是的,我会这么说。或者您可以在 select 中添加一个 div 并将内容放在那里。
    • 当我这样做时,我得到一个 "TypeError: document.getElementById(...) is null" ,这是我修改后的 jquery 脚本以及您的建议 codepaste.net/j5xjck 。再次感谢您的帮助!
    • document.getElementById("#regions").innerHTML = document.getElementById("#regions").innerHTML+"&lt;br /&gt;"+id+text; 需要去这里://do what you need to here (Put things in a div, etc) 并确保你有一个名为“regions”的 div,试试这个并告诉我你得到了什么
    • 好的 没有更多错误,我在我的选择中创建了一个名为区域的 div,但结果仍然没有显示。虽然结果已经返回,但它只显示“正在搜索”。
    猜你喜欢
    • 1970-01-01
    • 2016-09-11
    • 2017-08-16
    • 2013-06-12
    • 2015-10-15
    • 1970-01-01
    • 2018-11-22
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多