gpt4 book ai didi

javascript - 为什么我的 Rails AJAX 删除方法只有在我刷新时才有效?

转载 作者:太空宇宙 更新时间:2023-11-03 17:48:10 25 4
gpt4 key购买 nike

我刚刚将 DESTROY 方法合并到我的学校项目中。它运行良好,但现在我必须使用 AJAX 来完成操作。执行此代码后,它只会在我刷新页面时显示在浏览器上,而不会在我删除项目时立即显示。如果我没有包含足够的信息,请告诉我。

_item.html.erb

<% item.each do |i| %>
<p><%= i.name %> | <%= link_to "Complete", i, method: :delete, remote: true, class: 'glyphicon glyphicon-ok' %></p>
<% end %>

destroy.js.erb

<% if @item.destroyed? %>
$('#item-' +<%= @item.id %>).hide();
<% else %>
$('#item-' +<%= @item.id %>).prepend("<%= flash[:error] %>");
<% end %>

items_controller.rb

class ItemsController < ApplicationController
def index
@items = Item.all
end

def show
@item = Item.find(params[:id])
end

def new
@item = Item.new
end

def edit
@item = Item.find(params[:id])
end

def create
@item = Item.new(params.require(:item).permit(:name))

if @item.save
flash[:notice] = "The item was added to your list."
redirect_to current_user
else
flash[:error] = "There was a problem creating your item."
redirect_to current_user
end
end

def destroy
@item = Item.find(params[:id])

if @item.destroy
flash[:notice] = "\"#{@item.name}\" was completed and destroyed."
else
flash[:error] = "There was an error completing the item."
end

respond_to do |format|
format.html
format.js
end

end

end

最佳答案

Flash 为下一个请求设置消息,这就是它在您的创建操作中正常工作的原因(因为您正在重定向)。在您的销毁操作中,您正在渲染(这不好,因为这意味着删除请求在页面刷新时重新发送,您也应该在此处重定向)并设置 flash,因此它会在下一个请求(刷新)时显示。如果要发送消息以响应当前请求,则必须使用 flash.now :

flash.now[:notice] = "\"#{@item.name}\" was ..."

同样,您应该在成功时使用 flash 和重定向,在请求失败时使用 flash.now 和呈现。

编辑:

以上段落仅适用于html请求。我最初错过了问题的重点!谢谢BroiSatse

查看您的显示代码,您似乎没有设置 "#item-@item.id",因此您的返回 js 什么都不做。像这样添加:

<p id="item-<%= i.id %>"><%= i.name %> | ...

关于javascript - 为什么我的 Rails AJAX 删除方法只有在我刷新时才有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30769013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com