【问题标题】:Rails Routing pass parameter with ajax带有ajax的Rails路由传递参数
【发布时间】:2014-09-06 14:42:43
【问题描述】:

大家好,我是 Rails 的新手,我在使用 ajax 传递路线时遇到了麻烦。我已经阅读了有关此问题的其他一些 SO 帖子,但我认为我没有正确理解它们。如何让 ajax 使用 Rails 可以识别的路由格式,例如:localhost:3000/welcome/show/hi-me?或者我应该更改我的 rails 代码以匹配 ajax?

ajax 调用(在 index.html.erb 中)

//if url =
// /welcome/show   result: no ajax result
// welcome/show   result: GET http://localhost:3000/welcome/welcome/show?id=hi-me 404 (Not Found) 
// /show          result: GET http://localhost:3000/show?id=hi-me 404 (Not Found) 
// show           result: no ajax result

$.ajax({
    url: '/show',
    type: 'GET',
    data: {id: 'hi-me'},
    success: function(data) {console.log('success: '+data);},
    error: function(data) {console.log('error: '+data);}
 });

routes.rb

Rails.application.routes.draw do
get 'welcome/show/:id' => 'welcome#show'
get 'welcome/index'
get 'welcome/show'

welcome_controller

class WelcomeController < ApplicationController
  def index
    #render plain: "value: |#{params[:id]}|"
    #redirect_to :controller=>'welcome', :action => 'show', :message => params[:id]
  end

  def show
    render plain: "value: #{params[:id]}"
  end
end

【问题讨论】:

  • 正确的值应该是/welcome/show。你说它没有返回结果,但我想这可能是另一个需要解决的问题
  • 你也将id作为参数传递,如果你打算这样做,我认为你需要将你的路线固定到'welcome/show'而不是'welcome/show/:id'

标签: jquery ruby-on-rails ajax ruby-on-rails-4


【解决方案1】:

如果你想使用/welcome/show/hi-me 那么:

  • 你的路线是正确的get 'welcome/show/:id' =&gt; 'welcome#show'
  • 但是您的 ajax 不是,您需要将 url 更改为 /welcome/show/hi-me,参数中没有 id

但是如果你想使用/welcome/show?id=hi-me 那么:

  • 你的路线应该是get 'welcome/show' =&gt; 'welcome#show'
  • 您的 ajax 将是 url: '/welcome/show'params: {id: 'hi-me}

不确定 ajax 调用的重定向响应是否可以重定向初始页面,但您可以返回 javascript 重定向

def index
  respond_to do |format|
    format.js
  end
end

然后创建一个名为index.js.erb的模板

window.location = '<%= whatever_path %>'

【讨论】:

  • 我尝试了你的两个建议,但第一个在更改后没有重定向(控制台中没有错误),第二个(我更喜欢)显示成功:值:在控制台中,没有别的。还有其他想法吗?
  • 好的,所以第二种方法有效,但没有返回任何内容?检查您在控制器中的操作,它返回什么
  • derp,我犯了语法错误。它现在在控制台中返回 hi-me,但它不会重定向到显示页面
  • 您已经在显示页面上.. 还是从索引操作运行 ajax?
  • 我不知道是否允许 ajax 重定向响应重定向父页面,但您可以返回一个执行重定向的脚本,请编辑我的答案以向您展示如何
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 2011-05-15
相关资源
最近更新 更多