AJAX请求页面未重新渲染后
Posted
技术标签:
【中文标题】AJAX请求页面未重新渲染后【英文标题】:After AJAX request page isnt re rendered 【发布时间】:2021-07-19 17:31:53 【问题描述】:我在 blogs_controller 中的帖子可以通过天赋来选择。天赋可以通过下拉选择。当我选择任何其他选项时,页面正在使用 ajax 重新加载并且一切正常,但是如果我按下提交按钮,它应该发送空的 :flair
值并再次渲染页面和表格,但它会发送,我看看如何所有帖子都被选中,但没有任何变化,为什么?
这个我真的看不懂。
#blog_controller.rb
def index
@blogs = Blog.order("created_at desc")
if !(params[:flair].blank?)
@blogs = @blogs.where(:flair => params[:flair])
end
respond_to do |format|
format.html
format.json
end
end
def blog_params
params.require(:blog).permit(:name, :title, :content, :flair)
end
#index.html.haml
%h1 Listing blogs
= form_with method: :get do |f|
= f.select :flair, @flairs, ,onchange: "this.form.submit()"
= f.submit 'Clear', params: flair: ""
= render 'table'
%br
#_table.html.haml
%table#table
%thead
%tr
%th Name
%th Title
%th Content
%th Flair
%tbody
- @blogs.each do |blog|
%tr
%td= blog.name
%td= blog.title
%td= blog.content
%td= blog.flair
%td= link_to 'Show', blog
%td= link_to 'Edit', edit_blog_path(blog)
%td= link_to 'Destroy', blog, method: :delete, data: confirm: 'Are you sure?'
【问题讨论】:
【参考方案1】:这是因为您的请求需要一个 JS 响应,并且由于您不在控制器中处理它,因此它默认为 HTML。除非您在提交时重新加载页面,否则 HTML 不会重新呈现,因此即使调用了控制器方法,UI 中也不会发生任何事情。
【讨论】:
好的,我会添加index.js.haml
,但是为什么选择器会起作用?
调试这些东西的最简单方法是在控制器方法中检查您发送的请求:raise request.headers.inspect
。我的预感是,您实际上是在重新加载页面,而不是实际使用 Ajax,如果不进行调试很难判断。
你能多谈谈raise
吗?如何使用它以及在哪里可以找到文档。
没有很多关于它的文档apidock.com/ruby/Kernel/raise,因为这是在代码中的任何位置强制运行 RunTimeError 的非常简单的方法。用于调试目的是很好的,如果你到达了你不应该访问的部分代码,甚至返回 500。以上是关于AJAX请求页面未重新渲染后的主要内容,如果未能解决你的问题,请参考以下文章