javascript - 控制器在 AJAX 期间不呈现 show.js.haml
问题描述
我正在从 from_tag(搜索框)进行简单的 AJAX 调用,并希望在不刷新页面的情况下显示结果。问题是,即使我可以在服务器控制台中看到显示操作正在作为 JS 处理,它仍然呈现 HTML 而不是 js.haml 文件。我让控制器呈现 js 的唯一方法是将名称更改为 show.js 。然后它可以正常工作。show.js.erb 也不起作用。我也试过 format.js {render layout: false} 没有任何运气。这似乎是控制器方面的问题,但我在这里可能错了。任何想法表示赞赏!
编辑:
控制器操作正在使用渲染“show.js.haml”选项工作。另一个问题是 escape_javascript 在下面的 js.haml 文件中没有做任何事情。
显示.js.haml
$("#main").html("#{escape_javascript(render 'artists/show', locals: {artist: @artist, updates, @updates, reach: @reach, reach_diff: @reach_diff})}");
控制器
class ArtistsController < ApplicationController
def index
if params[:search]
@artist=Artist.find_by(name: params[:search])
redirect_to action: "show", id: @artist.id
else
@artists= Artist.all
end
end
def show
@artist= Artist.find(params[:id])
@updates = @artist.updates.order(created_at: :desc)
@reach = @artist.reachupdates.order(created_at: :desc)
@reach_diff= Reachupdate.last_week_diff(@artist.id)
respond_to do |format|
format.html
format.js {render "show.js.haml", layout: false}
end
end
end
解决方案
您需要更改render layout: false
为render 'show.js.haml', layout: false
def show
@artist= Artist.find(params[:id])
@updates = @artist.updates.order(created_at: :desc)
@reach = @artist.reachupdates.order(created_at: :desc)
@reach_diff= Reachupdate.last_week_diff(@artist.id)
respond_to do |format|
format.html
format.js {render 'show.js.haml', layout: false}
end
end
更新:
我遇到的下一个问题是将 ruby 对象插入到 js 文件中
如果文件'articles/show'
是部分文件,那么问题是locals
关键字应该与partial
关键字一起使用才能工作。尝试改变这个
$("#main").html("#{escape_javascript(render 'artists/show', locals: {artist: @artist, updates, @updates, reach: @reach, reach_diff: @reach_diff})}");
至
$("#main").html("#{escape_javascript(render partial: 'artists/show', locals: {artist: @artist, updates, @updates, reach: @reach, reach_diff: @reach_diff})}");
或者
只需删除locals
$("#main").html("#{escape_javascript(render 'artists/show', artist: @artist, updates, @updates, reach: @reach, reach_diff: @reach_diff)}");
推荐阅读
- javascript - 如何使活动幻灯片的高度从下到上增长?
- javascript - 为什么我的异步 jQuery ajax 调用阻塞?
- mysql - Mysql比较日期是否距离现在至少两天
- javascript - Javascript - 使用 Fetch 编辑表单
- apache-kafka - 显示高 CPU 使用率的 Kafka 弹性搜索接收器连接器
- python - 读取 .h5 文件非常慢
- spring-boot - lochalhost:8080 不显示 Centos 8 Tomcat SpringBoot 服务器内容
- python - Django:模型没有出现在管理面板上
- html - 如何在 iOS 版 Safari 中隐藏主页滑动栏?
- go - 在使用 Go 的 Apache Beam 中的 Pcollection 中使用 Protobuf 消息导致错误