【问题标题】:ruby, ajax and backbone红宝石、阿贾克斯和主干
【发布时间】:2018-12-14 13:19:58
【问题描述】:

我是 ruby​​ 和骨干网的新手,我正在尝试将数据发送到 ruby​​ 控制器,但我无法获取 ruby​​ 的参数。我忘记了什么?

在咖啡脚本页面上

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

在 Pry 控制台上

[1] pry(#<UserController>)> params
=> <ActionController::Parameters {"controller"=>"user", "action"=>"login"} permitted: false>

【问题讨论】:

    标签: ruby-on-rails ruby ajax backbone.js coffeescript


    【解决方案1】:

    如果没有您的所有代码,我不确定到底是什么问题。我认为最有可能的是你需要摆脱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 进程的控制台日志以及来自浏览器的控制台日志。

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 2018-07-04
      • 1970-01-01
      • 2023-03-06
      • 2023-03-21
      • 2015-01-13
      相关资源
      最近更新 更多