Javascript 选择2插件,不根据输入消除选项

Javascript 选择2插件,不根据输入消除选项,javascript,jquery,codeigniter,twitter-bootstrap,Javascript,Jquery,Codeigniter,Twitter Bootstrap,我正在尝试将Select2插件与CodeIgniter框架结合使用。经过大量的努力,我成功地让它与AJAX数据一起工作。然而,现在它有一个奇怪的问题。即使输入完整的名称,插件也不会消除与搜索词不匹配的无关选项 下面的屏幕截图描述了这一点 Firebug控制台如下所示: 下面是我的Javascript代码以及控制器代码 Javascript: $("#mentor-typeahead").select2({ width: "100%", placeholder: "Enter

我正在尝试将Select2插件与CodeIgniter框架结合使用。经过大量的努力,我成功地让它与AJAX数据一起工作。然而,现在它有一个奇怪的问题。即使输入完整的名称,插件也不会消除与搜索词不匹配的无关选项

下面的屏幕截图描述了这一点

Firebug控制台如下所示:

下面是我的Javascript代码以及控制器代码

Javascript:

$("#mentor-typeahead").select2({
    width: "100%",
    placeholder: "Enter a mentor name",
    maximumSelectionSize: 5,
    minimumInputLength: 2,
    multiple: true,
    ajax: {
        url: 'get_mentor_multi_list',
        quietMillis: 500,
        cache: true,
        dataType: 'json',
        results: function (data) {
            return { results: data };
        }
    }
});
控制器

function get_mentor_multi_list($query = null)
{
    $answer = array(array('id'=>1, 'text'=>'Inigo Montoya'),
                    array('id'=>2, 'text'=>'Zoey Deschanel'),
                    array('id'=>3, 'text'=>'Harry Potter'),
                    array('id'=>4, 'text'=>'Nicole Scherzinger'),
                    array('id'=>5, 'text'=>'Xerxes Mistry'),
                    array('id'=>6, 'text'=>'Tom Marvollo Riddle'),
                    array('id'=>7, 'text'=>'Light Yagami'),
                    array('id'=>8, 'text'=>'Vic Mackey'),
                    array('id'=>9, 'text'=>'Clark Kent'));

    echo json_encode($answer);
}
我完全搞不清楚是什么导致了这个问题。我也尝试了这里列出的解决方案,但没有效果。任何帮助都将不胜感激

根据请求更改了AJAX调用参数,但输出保持不变

$("#mentor-typeahead").select2({
        width: "100%",
        placeholder: "Enter a mentor name",
        maximumSelectionSize: 5,
        minimumInputLength: 2,
        multiple: true,
        ajax: {
            url: 'get_mentor_multi_list',
            quietMillis: 200,
            dataType: 'json',
            data: function (term, page) {
                return {
                              q: term,
                              page_limit: 10
                            };
                   },
            results: function (data, page) {
                return data;
            }
        }

ajax
部分中缺少
data
函数。请参阅和中的

ajax:{
url:“http://api.rottentomatoes.com/api/public/v1.0/movies.json",
数据类型:“jsonp”,
安静百万:100,
数据:函数(术语,页码){//page是Select2跟踪的基于页码的函数
返回{
q:term,//搜索术语
页面限制:10,//页面大小
页码:第页,//页码
apikey:“ju6z9mjyajq2djue3gbvv26t”//请不要使用,这样这个示例就可以继续工作
};
},
结果:功能(数据、页面){
var more=(第*10页)
您没有正确使用ajax函数。它正在做它应该做的事情,也就是显示从get\u mentor\u multi\u list()函数返回的所有数据

为了正确执行此操作,ajax调用需要包含一个数据属性,该属性包含要发送到get\u mentor\u multi\u list()函数的参数。get_mentor_multi_list()将只返回用户正在查找的结果


如果GeTyMeTracRoMulyListSo()中的数据是静态的(即不从任何数据库中读取),则应该考虑将其添加到数据属性中,比如加载数组数据示例。

< P>最后,我自己解决了这个问题。问题在于我使用的是CodeIgniter。因此,本应通过AJAX调用的data属性传递的任何变量实际上都不会传递给控制器

我通过将Javascript代码更改为以下内容来解决此问题:

function get_mentor_multi_list()
{
    // model code

    $query = trim($_GET['searchq']);    // get the search term typed by the user and trim whitespace

    if(!empty($query))
    {
        // retrieve data from database
    }
    else
    {
        $answer = array('id' => 0, 'text' => 'No results found');
    }

    echo json_encode($answer);
}
JavaScript

    $('#mentor-typeahead').select2({
    width: "100%",
    placeholder: "Enter a mentor name",
    maximumSelectionSize: 5,
    minimumInputLength: 2,
    multiple: true,
    ajax: {
        url: 'get_mentor_multi_list',
        quietMillis: 200,
        dataType: 'json',
        data: function (term, page) {
            return {
                searchq: term       // set the search term by the user as 'searchq' for convenient access
            };
        },
        results: function (data, page) {
            return {
                results: data
            };
        }
    }
});
控制器代码如下所示:

function get_mentor_multi_list()
{
    // model code

    $query = trim($_GET['searchq']);    // get the search term typed by the user and trim whitespace

    if(!empty($query))
    {
        // retrieve data from database
    }
    else
    {
        $answer = array('id' => 0, 'text' => 'No results found');
    }

    echo json_encode($answer);
}

这不是statc。我只是把它和虚拟数据放在控制器中,看看是否可以通过AJAX检索数据。我还尝试将数据函数放入链接中,但这并没有改变输出。你能通过添加一个数据函数来说明你的意思吗?见@stijn的答案。该数据函数将这些值传递给get\u mentor\u multi\u list()函数。然后,您可以使用这些值适当地筛选数据,并仅返回用户要求的值。@Stjin-下面是AJAX调用的修改代码。然而,输出保持不变。请告诉我我做错了什么,因为官方文档让我有点困惑。请尝试将
q
更改为
query
,以匹配控制器中的参数。