我正在使用jQuery UI自动完成。
当我使用局部变量作为源时,它可以工作。
var json = [
{type: "Utente",label: "Luca XXXX",url: "http://lvh.me:3000/users/4dde465add53e04e5c000001"},
{type: "Domanda",label: "Luca asdas adsfdsfdsf sdsd",url: "http://lvh.me:3000/questions/luca-asdas-adsfdsfdsf-sdsd"},
];
但是当我从另一个文件返回相同的源时,它不起作用。我在firebug中找到了JSON对象,它看起来与我的局部变量json相同。
代码如下:
$( ".query-input" ).autocomplete({
minLength: 3,
source: "/search.json",
select: function( event, ui ) { window.location = ui.item.url }
})
.data( "autocomplete" )._renderItem = function( ul, item ) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a href=" + item.url + ">"+ item.label +"</a><span>" + item.type + "</span>" )
.appendTo( ul );
};
这是search.json.erb文件:
[<% @results.each do |r| %>
<% if r.is_a? User %>
{type: "Utente",label: <%= r.name.to_json.html_safe %>,url: <%= user_url(r.id).to_json.html_safe %>},
<% elsif r.is_a? Question %>
{type: "Domanda",label: <%= r.text.to_json.html_safe %>,url: <%= question_url(r.slug).to_json.html_safe %>},
<% elsif r.is_a? Topic %>
{type: "Argomento",label: <%= r.name.to_json.html_safe %>,url: <%= topic_path(r.id).to_json.html_safe %>},
<% end %>
<% end %>]
有什么问题?
答案 0 :(得分:0)
$( ".query-input" ).autocomplete({
minLength: 3,
dataType: 'json',
source: "/search.json",
select: function( event, ui ) { window.location = ui.item.url }
})
您应该将dataType称为'json'
答案 1 :(得分:0)
我认为 html_safe
不会用双引号字符包装值。
编辑:结果html_safe
添加双引号字符。但是,Firebug跟踪中的JSON无效,与您问题中的代码不匹配:
[
{
type: "Utente",
label: "Luca XXXX",
url: "lvh.me:3000/users/4dde465add53e04e5c000001"; <-- syntax error
}, {
type: "Domanda",
label: "Luca asdas adsfdsfdsf sdsd",
url: "lvh.me:3000/questions/luca-asdas-adsfdsfdsf-sdsd"; <-- syntax error
},
]
在url
的值之后不应该有分号字符。
答案 2 :(得分:0)
问题是错过了回调。自动完成需要回调参数才能正常运行。 正确的search.json代码如下:
<%= "#{params[ :callback ]}(" if params[:callback] -%>
[<% @results.each_with_index do |r, i| %>
<% if r.is_a? User %>
{
type: "Utente",
label: <%= r.name.to_json.html_safe %>,
url: "<%= user_url(r.id) %>"
}
<% elsif r.is_a? Question %>
{
type: "Domanda",
label: <%= r.text.to_json.html_safe %>,
url: "<%= question_url(r.slug) %>"
}
<% elsif r.is_a? Topic %>
{
type: "Argomento",
label: <%= r.name.to_json.html_safe %>,
url: "<%= topic_path(r.slug) %>"
}
<% end %>
<%= "," unless i == @results.count - 1 %>
<% end %>]
<%= ")" if params[:callback] -%>