【发布时间】:2018-07-08 17:26:08
【问题描述】:
我正在运行 Rails 并尝试在我的文本字段上设置自动完成功能。我想提交给控制器方法。如果我从表单提交(使用“提交”按钮),我想使用“format.html”分支。如果我使用自动完成 Ajax 调用提交,我想使用“format.json”分支...
def search
if params.has_key?("s")
search = params[:s].strip
@people = Person.where("name ilike ?", "%#{search.upcase}%")
respond_to do |format|
format.html {
if @people.size == 1
redirect_to controller: 'votes', action: 'show', id: @people.first.id
end
}
format.json { @people.map(&:name) }
end
end
end
我像这样在我的文本字段上设置了自动完成
$(function() {
return $('#s').autocomplete({
source: function(request, response) {
$.get('/people/search', { s: request.term }, function(data) {
alert(data)
response(data.split('\n'));
});
}
});
});
但是“数据”的值是一个 HTML 页面,就好像我通过 format.html 方法提交一样。如何配置,以便我的自动完成调用强制我从控制器呈现 JSON 响应?
【问题讨论】:
-
在您的控制台中,您确定它是以 JSON 格式提交的吗?好像是JS。
-
我将“format.json”行更改为“format.js”,但仍在调用“format.html”分支。
-
你能添加你的控制台日志吗?以
Started GET...开头的位你可能需要做:$.get('/people/search.js'...。 -
在我进行了一些其他更改之后才起作用......我不得不在我的控制器中添加“protect_from_forgery except: :search”。我觉得这可能很糟糕,但我会就此提出另一个问题。
标签: ruby-on-rails json jquery-ui autocomplete controller