【问题标题】:Rails Render partial through ajaxRails 通过 ajax 渲染部分
【发布时间】:2015-04-30 10:14:48
【问题描述】:

我似乎无法加载 HTML,我得到 200 状态,服务器显示成功过程,但似乎仍然无法执行 .js.erb 文件中的任何内容。

链接按钮调用部分: <a> data-target="#user-form-modal" class="register-btn" data-remote="true" data-toggle="modal" data-user-type="1" href="/home/remote_sign_up">Student</a>

路线: get 'home/remote_sign_up', to: 'home#remote_sign_up', as: 'home_remote_sign_up'

home/remote_sign_up.js.erb

if($('.modal').length > 0) {
    $("#user-form-modal").modal();
}
else {
    $("body").prepend("<%= escape_javascript(render partial: 'remote_sign_up') %>");
    $("#user-form-modal").modal();
}

home/_remote_sign_up.slim我有我正在调用的模式。

home_controller.rb

respond_to :html, :json, :js

def index
  @subjects = Subject.all
  respond_to do |format|
    format.html
    format.json { render json: Subject.all.pluck(:name) }
  end
end

def remote_sign_up
 respond_to :js
end

application_controller.rb 我已声明:protect_from_forgery with: :exception

响应标头:

Cache-Control:max-age=0, private, must-revalidate
Connection:Keep-Alive
Content-Length:37815
Content-Type:text/javascript; charset=utf-8
Date:Fri, 27 Feb 2015 16:36:48 GMT
Etag:"86956ed8c50442138977628b146e1d80"
Server:WEBrick/1.3.1 (Ruby/2.1.2/2014-05-08)
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-Meta-Request-Version:0.3.4
X-Request-Id:11ec0be3-1899-407e-baec-f17b4870ab86
X-Runtime:0.253766
X-Xss-Protection:1; mode=block

预览:

0: 58
1: 58
2: 58
3: "><div class="
4: "><div class="
5: "><button class="
6: " data-target="
7: -1
8: " data-toggle="
9: " type="
10: "><span class="
11: ">Toggle navigation</span><span class="
12: "></span><span class="
13: "></span><span class="
14: "></span></button><a class="
15: " href="

回复:

if($('.modal').length > 0) {
    $("#user-form-modal").modal();
}
else {
    $("body").prepend(Modal code here);
    $("#user-form-modal").modal();
}

我收到的部分预览

【问题讨论】:

    标签: jquery ruby-on-rails ruby ajax render


    【解决方案1】:

    编辑:进一步查看代码后,发现了真正的错误。

    尝试将 format.js 添加到您的 respond_to 块中。并将其添加到 remote_sign_up 方法中。

    所以它看起来像这样:

    def remote_sign_up
      @subjects = Subject.all
      respond_to do |format|
        format.js
      end
    end
    

    【讨论】:

    • 试过了,即使添加了 remote_sign_up 方法并手动添加了 respond_to 块,仍然无法正常工作,但状态相同。我会发布回复。
    • 嗯...是时候调试一下了。你能用一些东西来替换你的 js.erb 文件来告诉你请求是否至少达到那么远吗?就像一个 alert("you made it to the js.erb template. yay!") 。至少你会知道这是 ruby​​/rails 问题还是 js 问题。
    • 是的,警报没有触发,但如果我在 escape_javascript 中添加错字,它会返回 500 状态。
    • 啊。刚刚再次查看了您的控制器。您在此处发送请求:home#remote_sign_up。这转化为“转到家庭控制器并点击 remote_sign_up 方法”。您的控制器中有 remote_sign_up 方法吗?我只看到 index 方法?
    • 我是在调试的时候添加的,结果还是一样,我写了一个js格式的respond_to块。
    【解决方案2】:

    抱歉,我花了很长时间才回答,现在一切正常,我所要做的就是添加 thin 作为网络服务器,它就可以工作了。

    【讨论】: