我正在向TheMovieDb发送请求,并试图将结果显示在同一页面上。
home.html.erb
<h1>Welcome here</h1>
<%= form_tag(root_path, remote: true, :controller => "pages", :action =>
"home", :method => "get", :class => "form") do %>
<%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Search", :class => "submit") %>
<% end %>
<% if @result %>
<%= puts @result %>
<div><%= @result %></div>
<% end %>
<script type="text/javascript">
document.querySelector('.form').addEventListener('submit', () => {
console.log('<%= @result.to_json %>');
});
</script>
pages_controller.rb
def home
require 'uri'
require 'net/http'
@search = params[:q]
url = URI("https://api.themoviedb.org/3/search/movie?api_key=my_api_key&query=#{@search}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(url)
request.body = "{}"
response = http.request(request)
if response.is_a?(Net::HTTPSuccess) === true
@result = JSON.parse(response.read_body)
puts @result
render json: @result
end
end
我不明白为什么我的变量在视图中等于null,但是我可以在控制台中看到结果。
有人可以解释我在做什么错吗?
答案 0 :(得分:0)
我假设您是在问“为什么我提交表单并呈现json响应后,为什么我的@result
不在这里?”
document.querySelector('.form').addEventListener('submit', () => {
console.log('<%= @result.to_json %>');
});
答案是:因为@result
在呈现页面后不存在。检查您生成的html(浏览器中的“查看页面源”)。您会在这里看到它。
<script type="text/javascript">
document.querySelector('.form').addEventListener('submit', () => {
console.log('null');
});
</script>
看看本指南,应该清除一些混乱:Working with Javascript in Rails。