Select2 ajax不显示结果
Posted
技术标签:
【中文标题】Select2 ajax不显示结果【英文标题】:Select2 ajax not showing results 【发布时间】: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 运行查询时,查询正在运行
【参考方案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+"<br />"+id+text;
需要去这里://do what you need to here (Put things in a div, etc)
并确保你有一个名为“regions”的 div,试试这个并告诉我你得到了什么
好的 没有更多错误,我在我的选择中创建了一个名为区域的 div,但结果仍然没有显示。虽然结果已经返回,但它只显示“正在搜索”。以上是关于Select2 ajax不显示结果的主要内容,如果未能解决你的问题,请参考以下文章