$(document).ready ->
#... other code ...
$("#item-select2").click ->
#alert "item was clicked!" #this code works
在点击通话中,我正在尝试向项目控制器(方法'show')发送一个AJAX请求,其中包含所选项目的ID。在控制器内#show我想找到我们的项目并将其作为json返回。
我有一个表单,当在下拉列表中选择特定项目时,我想显示该项目的价格,所以我需要通过AJAX检索它,但我不知道如何。如果有人可以指导我,那将非常感激。
我正在使用Jbuilder
答案 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}