我是ruby和backbone的新手,我正在尝试向ruby控制器发送数据,但是我无法获取ruby的参数。我忘记了什么?
在coffescript页面上
doLogin: ->
username = $(@el).find('#username').val()
password = $(@el).find('#password').val()
params = {username: username, password: password}
$.ajax
type: 'POST'
url: '/users/login'
data: params
cache: false
contentType: false
processData: false
success: (response) =>
if response.success
debugger
......
在路由器上
match '/users/login' => 'user#login', via: :post
用户控制器〈应用程序控制器
def login
username = params[:username]
password = params[:password]
@user = User.where({username: username, password: password}).first
......
end
在撬控制台上
[1] pry(#<UserController>)> params
=> <ActionController::Parameters {"controller"=>"user", "action"=>"login"} permitted: false>
1条答案
按热度按时间kqhtkvqz1#
没有你所有的代码,我不确定问题到底是什么,我认为最有可能的事情是你需要去掉
contentType: false
和processData: false
。contentType: false
意味着你没有发送内容类型,没有它Rails就不知道如何解析POST主体中的参数。你可能需要这里的默认值application/x-www-form-urlencoded
,如果你删除了这个选项,你会得到这个值。processData: false
告诉jQuery不要将params对象转换为POST主体的正确格式,而您希望jQuery这样做,因为您希望以application/x-www-form-urlencoded
发送数据,Rails将解析该格式并将其转换为参数。接下来,您可能应该将CSRF令牌与请求一起发送。您可以在调用
$.ajax
之前将以下代码行添加到Coffeescript中:您可以将此
$.ajaxSetup
调用放在某个更集中的位置,因为您可能希望它用于每个 AJAX 调用,而不仅仅是doLogin
。如果这两个都不是问题,您应该编辑您的帖子,以包括来自rails进程的控制台日志,以及来自浏览器的控制台日志。