繁体   English   中英

在Rails中的Ajax响应之后的JS动作

[英]JS actions after Ajax response in Rails

ajax请求有以下select标记:

= form_for owner, url: change_status_admin_owner_path(owner), remote: true do |f|
  .row
    = f.select(:status_id, options_from_collection_for_select(Status.all, :id, :description, 
    owner[:status_id]), {}, { data: { remote: true, url: change_status_admin_owner_path(owner), method: :patch } })

控制器中的动作:

def change_status
    Owner.find(params[:id]).update!(status: Status.find(params[:owner])
end

和change_status.js.erb:

$("html").remove();

这是JS,例如,不是真正的任务,但它不起作用 - 而不是做我的JS代码,我得到:

  <div class='content'>
    <div class='container'>
      $("html").remove();
    </div>
  </div>

即Rails将我的JS代码呈现为文本! 我的代码有什么问题? 谢谢!

如果您想要一个动作将响应设置为JS,请尝试添加一个respond_to块,如下所示:

def change_status
    Owner.find(params[:id]).update!(status: Status.find(params[:owner])
    respond_to do |format|
      format.js
    end
end

这将在您的views文件夹中查找change_status.js.erb文件。

继我的评论和manu29.d的回答之后,你最好看看使用respond_to块:

def change_status
  ...
  respond_to do |format|
     format.js #-> looks for change_status.js.erb
  end
end

-

但是,这无法解释为什么您的响应呈现为HTML(而不是JS)

我猜想,由于您的应用程序没有以text/javascript mime类型处理响应,Rails将在您的文件夹中查找名为change_status 任何格式的视图(IE可以是.html.erb.js.erb

因为它发现了一个名为.js.erb ,我猜它会被处理为静态HTML(因为erb只是一个预处理器)。 要解决这个问题, respond_to块基本上会设置mime类型,允许浏览器消化JS

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM