我正在尝试显示管理员列表的自动填充结果。我有以下代码:
Application.js
function log(message) {
$( "<div/>" ).text( message ).prependTo("#log");
}
$("#managers").autocomplete({
source : function(request, response) {
$.ajax({
url : "/managerlist",
dataType : "json",
data : {
style : "full",
maxRows : 12,
term : request.term
},
success : function(data) {
var results = [];
$.each(data, function(i, item) {
var itemToAdd = {
value : item,
label : item
};
results.push(itemToAdd);
});
return response(results);
}
});
}
});
项目控制器
def manager_list
list=Project.all.map{|i|i.manager_user_id}
arr= [].concat(list.sort{|a,b| a[0]<=>b[0]}).to_json
render :json =>arr
end
Routes.rb
match '/managerlist' => 'projects#manager_user_id'
_form.html.erb
<p>
<%= f.label :manager_user_id %><br />
<input id="managers" />
</p>
以下代码没问题,我没有收到萤火虫的错误。但是,当我尝试输入管理员名称,例如James Johnson时,名称将不会出现。我也尝试将整个函数放在_form.html.erb中并将其包装在标签中,这不起作用。有没有想过为什么会发生这种情况
所以我设法修复了我的错误,这是因为Jquery核心和Jquery ui的排序。
我有经理被列入名单。在下图中。
从图像可以看出,当我输入'Arm'时,它会显示整个经理列表,当它显示'Deshawn Armstrong'时。我知道这很可能与我的项目控制器
有关项目控制器
def manager_list
list=Project.all.map{|i|i.manager_user_id}
arr= [].concat(list.sort{|a,b| a[0]<=>b[0]}).to_json
render :json =>arr
end
答案 0 :(得分:2)
检查Firebug控制台中的响应,并确保字符串采用适当的json格式进行自动完成。
看起来你刚刚返回一个数组。 dataType
中的.ajax
设置未转换为json
;它只是期待这种格式。如果您没有从url : "/managerlist"
发回json,则可能是问题所在。
实际上,只要您的ajax
功能正常运行,您就可以:
return response(JSON.stringify({ results: results }));
JSON.stringify
:http://jsfiddle.net/xKaqL/
根据您的新信息,您需要在自动填充中添加minLength
选项。
$("#managers").autocomplete({
minLength: 2, // 2 or whatever you want
// rest of your code