我正在使用 Yii Booster 扩展,它将 Twitter Bootstrap 2.3.2 库包装成一个可用的 Yii 扩展。我有一个 typeahead 字段,它使用 AJAX 调用(使用 jQuery 的 ajax()
函数)获取数据。创建预键入字段的代码为:
$this->widget('bootstrap.widgets.TbTypeahead', array(
'model'=>$expense,
'attribute'=>'afm',
'htmlOptions'=>array('autocomplete'=>'off'),
'options'=>array(
'source'=>'js:function(query, process) {
$.ajax({url: "' . $urlAfm . '", data: {query: query}, dataType: "json" })
.done(function(data) {
return process(data);
})}',
'updater'=>'js:function(item) {
return item;
}',
'highlighter'=>'js:function(item) {
return item;
}',
)));
返回 JSON 数据的相应控制器操作为:
public function actionAjxGetAFM($query = '') {
if (Yii::app()->request->isAjaxRequest && trim($query) != '') {
$companies = Yii::app()->db->createCommand('SELECT name FROM company WHERE afm '
. 'LIKE :match LIMIT 10')->queryColumn(array(':match'=>$query . '%'));
Yii::trace(print_r(CJSON::encode($companies), true));
echo CJSON::encode($companies);
Yii::app()->end();
}
echo '0';
}
无论我尝试什么,输入第一个字符后都不会显示列表。我做错了什么?
来自控制器操作的 JSON 响应如下所示:
["'u039b'u03bf'u03cd'u03c1'u03b4'u03b1'u03c2 'u0392'u03b1'u03c3'u03af'u03bb'u03b5'u03b9'u03bf'u03c2","'u039c'u03bf'u03c5'u03c1'u03b1'u03c4'u03af'u03b4'u03bf'u03c5 'u039c'u03b1'u03c1'u03af'u03b1","'u03a0'u03bf'u03bb'u03c5'u03c7'u03c1'u03cc'u03bd'u03b7'u03c2 'u039b'u03bf'u03cd'u03c1'u03b4'u03b1'u03c2"]
而不是这个
'htmlOptions'=>array('autocomplete'=>'off'),
将其更改为
'htmlOptions'=>array('autocomplete'=>'on'),