如何将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。 这只会让你头疼。