Typeahead TypeError:it.toLowerCase不是函数

时间:2016-07-12 04:54:44

标签: jquery ajax twitter-bootstrap codeigniter-3

美好的一天。请先看一下我的精神。

我的JS

$(document).ready(function(){    
    $("#outlet").typeahead({
         source: function(query, process) {

                $.ajax({
                 url: '<?=base_url();?>graph/outletlists',
                 data: {outlets:$("#outlet").val()},
                 type: 'POST',
                 dataType: 'JSON',
                 success: function(data) {
                          process(data);
                          console.log(data);
                        }               
                    });
         },
        minLength: 2
    });
}); 

我的控制器

function outletlists()
    {
        extract(populateform());
        $hasil = $this->modelmodel->showdata("SELECT Outlet from transaksi where outlet like '%".$outlets."%' group by Outlet");
        echo json_encode($hasil);
    }

和我的表格

 <div class="form-group">
         <label class="col-sm-3 control-label">Outlet</label>
              <div class="col-sm-5">
                   <input type="search" id="outlet" class="form-control" placeholder="Search..." data-provide="typeahead" />
              </div>
   </div>

所以,我正在使用Bootstrap3-typeahead。从上面的脚本我得到了这个错误

来自console.log(data)我已经有了我想要的结果。所以我的问题是我看不到任何建议然后我从firebug

得到了这个错误
return ~it.toLowerCase().indexOf(this.query.toLowerCase());

这是我输入AR

时的结果
[{"Outlet":"K-AR3"},{"Outlet":"K-AR4"},{"Outlet":"K-ARN2"},{"Outlet":"K-ARN3"}]

任何帮助都会受到赞赏,抱歉我的英语不好。

我试着让它像http://twitter.github.io/typeahead.js/examples/

中的例子一样
var states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California',
  'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii',
  'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana',
  'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota',
  'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire',
  'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota',
  'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island',
  'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont',
  'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'
];
$(document).ready(function() {
    $("#outlet").typeahead({
        autoSelect: true,
        minLength: 2,
        delay: 400,
        source: states
    });
});

它有效。

firebug

的结果
  

POST http://localhost:84/new_store/graph/outletlists 200 OK 375ms
  jquery -.... min.js(第4行)HeadersPostResponseHTMLCookies

     

[{ “出口”: “K-AR3”},{ “出口”: “K-AR4”},{ “出口”: “K-ARN2”},{ “出口”: “K-ARN3” }]

     

TypeError:b.toLowerCase不是函数

     

...上(一){风险   B = this.displayText(A);返回〜b.toLowerCase()的indexOf(this.query.toLowe ...

     

bootstr .... min.js(第1行,第2903栏

我尝试将bootstrap3-typeahead.js更改为bootstrap3-typeahead.min.js,我的错误就像这样

  

TypeError:b.toLowerCase不是函数... on(a){var   B = this.displayText(A);返回〜b.toLowerCase()的indexOf(this.query.toLowe ...

3 个答案:

答案 0 :(得分:3)

正如我在console.log()中看到的那样。你知道了。

[{"Outlet":"K-AR3"},{"Outlet":"K-AR4"},{"Outlet":"K-ARN2"},{"Outlet":"K-ARN3"}]

你只需要

[{"K-AR3"},{"K-AR4"},{"K-ARN2"},{"K-ARN3"}]

所以尝试将控制器更改为

function outletlists()
    {
        extract(populateform());
        $hasil = $this->modelmodel->showdata("SELECT Outlet from transaksi where outlet like '%".$outlets."%'  group by Outlet");
        $data = array();
        foreach ($hasil as $hsl)
            {
                $data[] = $hsl->Outlet;
            }
        echo json_encode($data);
    }

答案 1 :(得分:0)

尝试使用以下示例作为静态代码,然后使其动态化 示例:http://twitter.github.io/typeahead.js/examples/

答案 2 :(得分:0)

即使已经接受了一个答案,我也要提供另一个答案,因为这个答案不适用于我的情况。原来,我的数组元素之一是空值。因此,我重写了数据查询以过滤出空值。