我认为这是一个非常简单的问题。我来自PhP背景,并且一直都是这样做的,所以我可能会以错误的方式看待它。
我正在尝试在RoR中创建一个ajax处理程序。当用户单击按钮时,javascript会触发POST,并使用jQuery的ajax函数的“success:”参数向用户提供反馈。
问题是,RoR正在尝试为ajax处理程序加载一个视图,当我真的需要控制器中的几行来完成数据库工作时,并回显出一个将由用户的javascript解释的状态代码
这只是一个mailchimp订阅暂存页面,所以我只使用'home'控制器。
我的路线;
map.root :controller => 'home'
map.connect '/mcsubscribe', :controller => 'home', :action => 'mcsubscribe'
我的家庭控制器;
class HomeController < ApplicationController
def index
# no content
end
def mcsubscribe
print params[:email]
end
end
我的测试javascript,只是让你了解发生了什么;
function mcSubscribe() {
var email = jQuery("#signup_input_email").val();
jQuery.ajax({
type: "POST",
url: "http://domain.com/mcsubscribe",
data: "email=" + email,
cache: false,
success: function(result) {
alert(result);
}
});
}
我认为这是一个常见的问题,但我已经搜索过,只是设法找到重定向的建议,因为用户永远不会访问/ mcsubscribe页面,这似乎不合适。
答案 0 :(得分:14)
查看http://guides.rubyonrails.org/layouts_and_rendering.html#using-render
您可能需要render :nothing => true
编辑:误读了您的问题,render :text => "yourtext"
应该符合您的需求
答案 1 :(得分:11)
使用
print params[:email]
只会将该值打印到应用程序日志中,而不是打印到响应中。
你想要这个:
render :text => params[:email]
答案 2 :(得分:2)
在Rails 5中,你需要使用'plain':
render plain: params[:email]
答案 3 :(得分:0)
你需要这样的东西:
def mcsubscribe
# Do something to unsubscribe
respond_to do |format|
format.html { redirect_to(success_page) }
format.js { render :text => params[:email] }
end
end
如果使用ajax,params[:email]
将作为文本发送。如果需要HTML格式(即用户单击链接或填写常规表单),则会发出重定向以告知用户订阅已成功。