Rails Edge Guides,AJAX示例 - 为什么同时使用“format.js”和“format.json”

Rails Edge Guides, AJAX example- why use both 'format.js' and 'format.json'?

本文关键字:format js json Guides Edge AJAX 示例 为什么 Rails      更新时间:2023-09-26

在 Rails Edge Guide 的"Working with Javascript"部分,给出了一个如何在"用户"控制器中构建"create"操作的示例,以便将 AJAX 集成到创建操作中:

# app/controllers/users_controller.rb
# ......
def create
  @user = User.new(params[:user])
  respond_to do |format|
    if @user.save
      format.html { redirect_to @user, notice: 'User was successfully created.' }
      format.js   {}
      format.json { render json: @user, status: :created, location: @user }
    else
      format.html { render action: "new" }
      format.json { render json: @user.errors, status: :unprocessable_entity }
    end
  end
end

我在这里读到"format.js"和"format.json"都是需要的,因为Javascript和JSON是不同类型的响应。 我的问题是,如果在"create"操作的 if 语句的前半部分指定了这两种格式,为什么在后半部分不需要这两种格式? 这是否意味着Javascript在成功时使用'create.js.erb'文件,但在失败时使用不这样做?

是的,你是对的。 根据浏览指南,看起来在失败的情况下,您不想对 js 做任何事情。 如果你要把

format.js   {}

在失败块中,它也会尝试执行render @user部分,这可能会导致错误。

如果你真的想在失败时执行一个js块,你可以像其他格式一样执行