我试图在" link_to"上实施AJAX时陷入困境。视图已呈现,在该视图中,我有另一个AJAX调用。
我有菜单边栏,其中有这样的内容:
<li class="<%= is_active_action('positions') %>"><%= link_to "Positions", positions_path, remote: true %></li>
在 application.html.erb 中我有:
<!-- Main view -->
<div id="yield">
<%= yield %>
</div>
实际上不确定这是否是正确的方法,但到目前为止它还有效。
然后在 views /../ positions / index.js.coffee 我有这个
$("#yield").empty()
.append("<%= escape_javascript(render 'inventory/positions/index') %>")
这是reposition /positions / _index.html.erb partial。在那里,我有<div id="media_list">
和<div id='positions_table'>
在资产/ javascripts中我有 positions.coffee
$ ->
$(document).on 'change', '#media_list', (evt) ->
$.ajax 'update_positions',
type: 'GET'
dataType: 'script'
data: {
media_id: $("#media_list option:selected").val()
}
error: (jqXHR, textStatus, errorThrown) ->
console.log("AJAX Error: #{textStatus}")
success: (data, textStatus, jqXHR) ->
console.log("Dynamic media select OK!")
这基本上是听下拉变化,然后将media_id
传递给控制器,然后这个 / views /../ positions / update_positions.js.coffee 呈现第二部分(/视图/../位置/ _positions.html.erb):
$("#positions_table").empty()
.append("<%= escape_javascript(render 'inventory/positions/positions', locals: {positions: @positions}) %>")
在下拉列表更改的那一刻,我无法使第二部分(_positions.html.erb)呈现。任何想法可能出错?谢谢你的帮助。
更新
我在我的路线中设置了这个:
get '/update_positions', to: 'inventory/positions#update_positions'
然后在控制器中我有这个:
def update_positions
@positions = Positions::Positions.where('media_id = ?', params[:media_id])
当:media_id
通过时,我在控制台Started GET "/update_positions?media_id=1"
中得到此结果,并且视觉上的结果符合预期。但是当我连续做几个类似的请求时,会发生奇怪的事情。看起来请求是成倍增加,似乎有很多历史要求一次又一次地重复。我的假设是因为这个/update_positions?media_id=1
请帮忙,我做错了什么?
更新2
首先,我调整了路由到实际控制器我有:
get '/inventory/positions/update_positions', to: 'inventory/positions#update_positions'
当我从/users/1/edit
等路线跳过时,以前的路线无法正常工作。
在我的 /views/inventory/positions/update_positions.js.coffee 中我有这个:
$("#positions_table").empty()
.append('<%=j render 'inventory/positions/positions'%>');
多个查询如下所示:
Started GET "/inventory/positions/update_positions?media_id=1" for 78.84.173.112 at 2016-12-20 05:29:39 +0000
Parameters: {"media_id"=>"1"}
#several queries follow
Started GET "/inventory/positions/update_positions?media_id=1" for 78.84.173.112 at 2016-12-20 05:29:39 +0000
Parameters: {"media_id"=>"1"}
#several queries follow
当我打开特定视图,选择“让”时,会发生这种情况。说&#34;价值:1&#34;从下拉列表中呈现特定部分。然后我转到不同部分的另一个AJAX视图,然后返回并再次选择&#34;值:1&#34;。如果我多次这样做,那么查询就会越来越多地复制。它停止,当我进行整页刷新时 - 然后一切都从正常位置开始,但是当我重复多次选择时,查询再次增长。
答案 0 :(得分:1)
在 application.html.erb :
<!-- Main view -->
<div id="yield">
<div id="positions_index"></div>
<%= yield %>
</div>
在 positions / index.js.coffee :
$("#positions_index").html "<%= escape_javascript(render 'inventory/positions/index') %>"
$("#positions_index").on "change", "#media_list", (e) ->
$.get '/update_positions',
media_id: $("#media_list option:selected").val()
, null
确保在路线中定义了update_positions。