【发布时间】:2011-01-08 05:03:20
【问题描述】:
当我在前端执行 javascript ajax 请求时,我有一个特定的 Rails 控制器方法会返回一些 JSON。
但是,我想阻止用户直接输入显示该方法返回的 JSON 的 url。我还希望仍然能够执行我的 ajax 请求。我怎样才能简单地做到这一点?谢谢!!
【问题讨论】:
标签: ruby-on-rails
当我在前端执行 javascript ajax 请求时,我有一个特定的 Rails 控制器方法会返回一些 JSON。
但是,我想阻止用户直接输入显示该方法返回的 JSON 的 url。我还希望仍然能够执行我的 ajax 请求。我怎样才能简单地做到这一点?谢谢!!
【问题讨论】:
标签: ruby-on-rails
只是一个想法...您可以在 respond_to 块中为 html 请求做一些自定义的事情。
respond_to do |format|
format.html { ... } # give them a 404 response?
format.js { render :json => @obj }
end
或者你的 html.erb 模板可能只是显示某种拒绝访问的消息。然后你就会有这个:
respond_to do |format|
format.html
format.js { render :json => @obj }
end
【讨论】:
你可以用
包裹你的动作 if request.xhr?
...
end
【讨论】:
rails3 控制器中的 respond_to 过滤器非常好用。
YourJsonController < ApplicationController
respond_to :json
def index
#non-json requests will receive a 406 error
end
end
【讨论】:
在您的routes.rb 中,您可以添加 :via => :post 以便您的 URL 只接受 POST 请求。请参阅http://guides.rubyonrails.org/routing.html 上的“HTTP 动词约束”
【讨论】: