【发布时间】:2018-12-14 22:36:18
【问题描述】:
我正在尝试做一个简单的网站,如果你愿意的话,是一个股票跟踪器。其中一项功能是使用 ajax 获取结果,因为不加载整个页面,我可以尽可能地将带有我想要的数据的 html 获取到响应中,但无法将其加载到页面中。当我添加等效的 js.erb 文件时,我根本没有得到任何响应。
这是页面:(my_portfolio.html.erb)
<h1> My Portfolio</h1>
<h3>Search for stocks</h3>
<div id="stock-lookup">
<%= form_tag search_stocks_path, remote: true, method: :get, id: "stock-lookup-form" do %>
<div class="form-group row no-padding center col-md-12">
<div class="col-md-10">
<%= text_field_tag :stock, params[:stock], placeholder: "Stock ticker symbol", autofocus: true,
class: "form-control search-box input-lg" %>
</div>
<div class="col-md-2">
<%= button_tag :submit, class: "btn btn-lg btn-success" do %>
<%= fa_icon "search" %> Look up a stock
<% end %>
</div>
</div>
<% end %>
</div>
<div id="results">
<%= render 'users/result' %>
</div>
这是在底部呈现的部分:(_result.html.erb)
<% if @stock %>
<div class="well results-block">
<strong>Symbol: </strong><%= @stock.ticker %>
<strong>Name: </strong><%=@stock.name %>
<strong>Price: </strong><%= @stock.last_price %>
</div>
<% end %>
这是您提交表单时运行的方法 (stocks_controller.rb):
class StocksController < ApplicationController
def search
if params[:stock].present?
@stock = Stock.new_from_lookup(params[:stock])
if @stock
respond_to do |format|
format.js { render partial: 'users/result' }
end
else
flash[:danger] = "You have entered an invalid symbol."
redirect_to my_portfolio_path
end
else
flash[:danger] = "You have input an unexistant stock."
redirect_to my_portfolio_path
end
end
end
这是我的问题:当我提交有效输入时,我在浏览器中检查服务器响应,然后我看到响应文本:
<div class="well results-block">
<strong>Symbol: </strong>GOOG
<strong>Name: </strong>Alphabet Inc.
<strong>Price: </strong>1042.1
</div>
这意味着我正在取回数据,但是,尝试将其放在页面上是行不通的,因为当我创建适当的 _result.js.erb 时,请求根本不会返回任何内容,并且页面不是t 填充数据,请求仅在没有 js.erb 文件时返回 200。这是代码:(_result.js.erb)
$('#results').html("<%= j (render 'users/result') %>")
我不知道错误可能是什么。有人能解释一下吗?
编辑:批准的答案有效,是的,但我发现您也可以通过渲染来更改页面内容,并且 $('#results').html("<%= j (render 'users/result') %>") 实际上尝试渲染页面,而实际意图只是获取 html,为此,只需使用 $('#results').html("<%= j (render partial:'users/result.html.erb') %>") 代替。但是,html.erb 部分似乎是绝对必要的,这与 rails 中的其他任何地方不同。如果有人能指出原因,那就太好了。
【问题讨论】:
标签: javascript jquery ruby-on-rails ajax ruby-on-rails-5