我正在尝试使用jquery ui自动完成功能来处理codeigniter项目。
到目前为止,我有一个输入字段<input type="text" id="text1"/>
然后在我的脚本中我有
source: function(request, response) {
$.post('autocompleteHandler', {mechanic: request.term}, function(data) {
console.log('data.phpResp = '+data.phpResp);
console.log('in post?');
console.log('data = '+data.toSource);
var realArray = $.makeArray(data); // this line was needed to use the $.map function
response($.map(realArray, function(item) {
console.log('in map');
return {
label: item.info,
value: item.info
}
}));
}, 'json');
},
在我的codeigniter控制器中,我有这个功能
function autocompleteHandler() {
$input = $this->input->post('mechanic');
$this->load->model('login_model');
$results = $this->login_model->search_mechanic_criteria($input);
$mechs= array();
foreach($results as $result) {
$mechs['info'] = $result['mechanic_name'];
}
}
我没有让这个工作。任何人都有任何想法,我可以开始进行故障排除?我真的很难用jquery ui文档。
编辑:我已经改变了我的代码。而不是返回json_encode,我需要在php方面回应json_encode。我的控制台中仍然没有显示任何内容。
2ND EDIT 现在我的问题是,如何为自动完成功能返回多个值?如果我有一个返回的查询,只有一行,它工作正常,但如果我有多行返回,则不起作用。它必须与我返回数据的方式有关,但我无法弄明白。
答案 0 :(得分:1)
在你提到toSource()之后,我一直在玩jsfiddle。见http://jsfiddle.net/XYMGT/。我发现map函数不返回jQuery,而是返回新数组。
OLD STUFF:
我怀疑$ .map函数不会返回数组,而是返回jQuery。也许它会这样做:
// also you could inspect the data if the server returns what you think it returns:
console.log(data);
// first map the array
$.map(data, function(item) {
console.log('in response?');
return {
label: 'testing',
value: 'test'
}
})
// ...then separately do the response part
response(data);
让我们知道它是否有所作为。
编辑:
如果仍然使用此PHP代码:
function autocompleteHandler() {
echo json_encode(array('phpResp' => 'something'));
}
然后console.log(data)应该在FireBug的控制台选项卡中显示以下内容:
{'phpResp':'somehting'}
表示console.log(data.phpResp)应该打印'something'。我不确定你从哪里获取data.toSource。
答案 1 :(得分:0)
我会启动fiddler,看看它说的是什么回来了。您还可以直接在提供JSON结果的浏览器中访问服务器端页面。我认为自动填充会自动将?term
添加到字符串中。 url.aspx?term=|valueofText1|
$("#text1").autocomplete({
source: url,
minLength: 2,
select: function (event, ui) {
sou = ui.item.label;
}
});