Rails4 - 对项目控制器的AJAX请求

时间:2014-06-02 23:56:10

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

$(document).ready ->
 #... other code ...
  $("#item-select2").click ->
    #alert "item was clicked!" #this code works

在点击通话中,我正在尝试向项目控制器(方法'show')发送一个AJAX请求,其中包含所选项目的ID。在控制器内#show我想找到我们的项目并将其作为json返回。

我有一个表单,当在下拉列表中选择特定项目时,我想显示该项目的价格,所以我需要通过AJAX检索它,但我不知道如何。如果有人可以指导我,那将非常感激。

我正在使用Jbuilder

Continuation question

2 个答案:

答案 0 :(得分:2)

由于你有一个下拉列表,你需要监听change事件,执行Ajax调用并将价格放入你想要的元素中,例如:

$(document).ready ->
    $("#item-select2").change ->
        selectedItem = $(this)
        $.ajax([
            "/items"
            "/"
            selectedItem.val()
            ".json"
       ].join("")).done (item) ->
            $(".price").html item.price

在Rails端,您需要指定控制器响应JSON 通过在操作线之前的控制器顶部添加respond_to :json,例如

class ItemsController < ApplicationController
   before_action :set_item, only: [:show, :edit, :update, :destroy]
   respond_to :json, :html

同样在你的show动作中更新你的响应,所以你支持html和json,如果你没有使用某些json序列化程序,如jbuilder,那么你不需要添加这些更改:

def show
  respond_to do |format|
    format.html
    format.json  { render json: @item.to_json }
  end
end

希望这对你有帮助,

干杯

答案 1 :(得分:0)

您需要所选选项的商品ID。你可以这样做:

var itemId = $('#items').find(':selected').attr('id');

使用商品ID,您可以对展示操作发出GET个请求。查看jQuery.get() documentation以获取示例。您可能还需要在JS支持的控制器操作中添加respond_to块。 ajax请求可能如下所示:

$.get("/items" + itemId, function(data) {
  $(".price").html(data['price']);
});

如果rails控制器操作将该项目的价格发送回JS,则:

render json: {price: @item.price}