ruby, AJAX 和 Backbone

t3irkdon  于 2022-11-10  发布在  Ruby
关注(0)|答案(1)|浏览(94)

我是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>
kqhtkvqz

kqhtkvqz1#

没有你所有的代码,我不确定问题到底是什么,我认为最有可能的事情是你需要去掉contentType: falseprocessData: 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中:

token = $('meta[name="csrf-token"]').attr('content')
$.ajaxSetup
  beforeSend: (xhr) -> 
    xhr.setRequestHeader('X-CSRF-Token', token)

$.ajax
  type: 'POST'
  url: '/users/login'
  data: params
  cache: false
  success: (response) =>
    console.log(response)

您可以将此$.ajaxSetup调用放在某个更集中的位置,因为您可能希望它用于每个 AJAX 调用,而不仅仅是doLogin
如果这两个都不是问题,您应该编辑您的帖子,以包括来自rails进程的控制台日志,以及来自浏览器的控制台日志。

相关问题