如何将params传递给Rails控制器方法然后使用JQuery / AJAX返回值?

我使用click函数首先获取数组/位置,然后通过AJAX调用将其发布到控制器方法。 然后我想让方法返回一个布尔值来启用jquery函数中的addClass。 控制台始终丢失500服务器错误。

这是.js文件:

$(document).ready(function(){ $("#backboard").on("click", "div", function(e){ $("#backboard div").removeClass("selected"); var val = $(this).data('val'); $.ajax ({ type: 'POST', url: "https://localhost:3000/chess/:pos", data: {pos: {value: val}}, success: function(d){ if(d === true){ $(this).addClass("selected").append("

"+val+"

"); } } }); }); });

这是controller.rb文件:

  class ChessController < ApplicationController include ChessHelper def new @select = false @game = Game.new("white", "ARSEFACE!!!") @arr = @game.board @cpu = @game.cpuName @player = @game.playerName end def select pos = params[:pos] a = pos[0] b = pos[1] if(@arr[a][b][0]===@color) @select = !@select end respond_to do |format| format.json { render json: @select } end end end 

这是config / routes.rb:

  get '/chess', to: 'chess#new' post '/chess/:pos' => 'chess#select' 

我知道我可能错过了一些非常明显的东西,但任何帮助都将不胜感激!

PS和从变量中获取数据的val变量确实有一个值。 我试图将该值传递给控制器​​以返回true或false,并且一旦我解决了这个基本问题,最终将成为validation函数。

url: "https://localhost:3000/chess/:pos",不会被插值,除非我完全遗漏了什么。

使用post '/chess/:pos' => 'chess#select'你告诉Rails(特别是它的路由器)在位置:pos查找请求路径中的param,当它找到它时,设置params散列(在params[:pos] )到路径中的:pos的值。

jQuery对Rails的路由器一无所知。 也没有Javascript。

要查看我的意思,请将其添加到routes.rb文件中:

get '/:cookies/and/:cream' => 'application#test'

application_controller.rb ,添加以下内容:

 def test render :text => "I love me some #{params[:cookies]} with my #{params[:cream]}" end 

然后点击http://localhost:3000/chocolate-chip/and/milk

应该读“我爱我一些巧克力片加牛奶”

现在,假设您的其他代码没问题,

 $("#backboard").on("click", "div", function(e){ $("#backboard div").removeClass("selected"); var val = $(this).data('val'); $.ajax ({ type: 'POST', url: "http://localhost:3000/chess/" + val, success: function(d){ if(d === true){ $(this).addClass("selected").append("

"+val+"

"); } } });

应该这样做。 无需在ajax函数中传递任何其他data

另外,不要在开发中使用HTTPS。 这只会让你头疼。