【发布时间】:2021-03-21 05:21:14
【问题描述】:
我在从动作渲染 .js.erb 时遇到问题。动作触发,rails 告诉我它正在渲染 js.erb,但 js 从未被渲染,并且从控制台日志中可以明显看出 js 没有渲染到浏览器的控制台。我在网上尝试了一堆解决方案,但似乎无法找出为什么 rails 会告诉我这个 js 模板正在渲染,但实际上并没有在浏览器中渲染。 我可能会错过什么?
控制器动作
def dynamic_search
puts "WE ARE IN DYNAMIC_SEARCH"
puts params[:q]
client = HTTPClient.new
string = 'call to google places api'
@result = client.get_content(string)
@hash = JSON.parse @result
render "home/dynamic_search.js.erb", format: :js
end
Rails 终端输出
Rendering home/dynamic_search.js.erb
Rendered home/dynamic_search.js.erb (Duration: 0.0ms | Allocations: 4)
Completed 200 OK in 479ms (Views: 0.7ms | ActiveRecord: 0.0ms | Allocations: 4613)
更新:
调用该操作的代码如下(不是 100% 正确,目前只是使用 JQuery 轻松自动完成测试调用)
document.addEventListener("turbolinks:load", function() {
$input = $('*[data-behavior="autocomplete"]')
var options = {
url: function(phrase){
console.log(phrase)
return '/search/' + phrase
}
}
$input.easyAutocomplete(options);
});
【问题讨论】:
-
你能分享
dynamic_search.js.erb的代码吗?没有任何错误或任何东西只是呈现一个空白页面?您能否也提供一个您尝试过但不起作用的示例 URL? -
你是怎么进入这个页面的?
dynamic_search听起来这可能是一个您没有处理的 AJAX 调用。 Rails 显然正在呈现该页面,因此我们将需要更多详细信息来确定您的问题所在。 -
我在这里与贡献者合作:你能分享来自 dynamic_search.js.erb 的代码吗?它只包含一个
console.log('here')。这是在从 jquery 触发的 Rails 中命中操作后呈现的。页面已加载,jquery 命中动作,动作在 rails 中呈现并期望呈现dynamic_search.js.erb(并且 rails 报告它呈现它)。但是 javascript 从未接触过浏览器。事实上,我们无法通过 chrome 检查器在源中找到dynamic_search.js.erb。 -
@jamesdlivesinatree 您实际上是在访问“/some/path/dynamic_search.js”还是从另一个页面加载的。如果另一个页面,请发布代码显示它是如何被加载的。
-
它正在从另一个页面加载。请参阅更新的说明。 1.用户登陆页面,将jquery脚本加载到
/search/x。 2. Rails 将/search/x路由到dynamic_search。 3dynamic_search呈现dynamic_search.js.erb(它有一个控制台日志和一个alert()),但在前端从未看到控制台日志或警报(仔细检查浏览器日志过滤器等)。
标签: javascript jquery ruby-on-rails ruby ruby-on-rails-6