Ajax调用控制器中定义的方法抛出[object Object]

时间:2012-08-10 19:57:58

标签: jquery ruby-on-rails ajax callback

我正在关注此SO answer,所以我试着调用我定义的方法:

class IngredientsController < ApplicationController
  ...
  def get_restaurant_id(menu_id)
    Menu.find_by_id(menu_id).restaurant_id.to_i
  end

通过AJAX电话:

m_id = $('#dish_menu_id').val()
$.ajax "/ingredients/get_restaurant_id(" + m_id + ")"

我已经定义了 routes.rb

resources :ingredients do
  get :get_restaurant_id, on: :collection
end

但我的console.log($.ajax "/ingredients/get_restaurant_id(" + m_id + ")")会显示以下错误消息:

GET http://localhost:3000/ingredients/get_restaurant_id(1) 404 (Not Found) 

我不确定我做错了什么。还有另一种通过AJAX调用传递m_id参数的方法吗?

理想情况下,我想让AJAX调用返回餐馆ID的整数值。

PS - 这是替代解决方案我已经找到了original SO post我想要克服的问题。


编辑1

我现在对于我正在使用GET / POST做什么有所了解(我希望)所以我重新定义了我的方法:

ingredients_controller.rb

def get_restaurant_id
  Menu.find_by_id(params[:m_id]).restaurant_id
end

但我得到Template is missing500 Internal Server Error

我知道没有这个模板。那么有什么方法可以让它只是做一个简单的SQL查询来获取餐厅ID并将其返回给Ajax调用?

所以我的Ajax调用现在看起来像这样:

$.ajax "/ingredients/get_restaurant_id?m_id=" + m_id

编辑2:几乎在那里

我将方法改为:

def get_restaurant_id
  menu_id = params[:m_id]    
  r_id = Menu.find_by_id(params[:m_id]).restaurant_id.to_s
  render :json => r_id 
end

现在在我的Ajax中,我得到一个Object,它在responseText字段内有答案,但我似乎无法访问它。

我试过这个:

r_id = $.ajax "/ingredients/get_restaurant_id?m_id=" + m_id
alert "After call to get_restaurant_id " + r_id.responseText

但请将其作为undefined

我的控制台日志中的Object如下所示:

...
readyState: 4
responseText: "1"
setRequestHeader: function ( name, value ) {
...

1 个答案:

答案 0 :(得分:0)

我能够弄清楚。这是我做的:

<强> restaurants_controller.rb

def get_restaurant_id 
  r_id = Menu.find_by_id(params[:m_id]).restaurant_id.to_s
  render :json => r_id 
end

由于我将方法移至restaurants_controller的{​​{1}},因此请务必更新ingredients_controller以反映此更改。所以它看起来像这样:

routes.rb

我的jQuery / Ajax现在看起来像这样:

resources :restaurants do
  get :get_restaurant_id, on: :collection
end

现在,您的m_id = $('#dish_menu_id').val() # To get the menu_id from the dropdown menu r_id = "" # restaurant_id variable # Call my get_restaurant_id method request = $.ajax type: 'GET' url: "/restaurants/get_restaurant_id?m_id=" + m_id async: false success: (text) -> r_id = text console.log(request) # Just for programming purpose to show what I'm getting from AJAX 将保留r_id

的整数值