如果您愿意,我正在尝试创建一个简单的网站,一个股票追踪器。功能之一是使用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
时,请求根本不返回任何内容,并且页面未填充数据,则在没有js.erb文件时,请求仅返回200。这是代码:(_result.js.erb)
$('#results').html("<%= j (render 'users/result') %>")
我不知道错误可能是什么。有人可以阐明这一点吗?
编辑:是的,答案是肯定的,是的,但是我发现您还可以传递一个渲染器来更改页面内容,$('#results').html("<%= j (render 'users/result') %>")
实际上试图渲染页面,而实际目的只是为了获得页面的内容。为此,只需使用$('#results').html("<%= j (render partial:'users/result.html.erb') %>")
即可。但是,html.erb
部分似乎绝对必要,与其他地方不同。如果有人能指出原因,那就太好了。
答案 0 :(得分:0)
似乎您已经关闭,问题在于将服务器渲染与客户端渲染混为一谈。您的JavaScript示例 的
$('#results').html("<%= j (render 'users/result') %>")
只会在服务器上渲染1次,因此当您从ajax调用中获得响应时,它不会对客户端产生任何影响。
要使其正常工作,它必须是ajax或fetch调用的一部分,并且应类似于以下内容。
html_results_string = "YOUR RAW HTML RESPONSE"
$('#results').html(html_results_string)
旁注,我也建议在此不提供ID。根据要请求的事物的ID,使用诸如数据选择器之类的东西。