首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ajax responseText渲染多个部分

Ajax responseText渲染多个部分
EN

Stack Overflow用户
提问于 2018-01-12 15:46:02
回答 2查看 58关注 0票数 0

我正在尝试使用ruby on rails和Ajax编写一个小的弹出窗口,以便在我的应用程序上添加一个新事件。

我已经实现了Ajax并让操作正常工作,但是在responseText中发送的字符串包含的不仅仅是我试图显示的部分。

从服务器端来看,由于它显示的输出,这是有意义的:

代码语言:javascript
复制
Started GET "/events/new.html" for 127.0.0.1 at 2018-01-11 21:58:18 +0100
Processing by EventsController#new as HTML
  Rendering events/new.html.erb within layouts/application
  Rendered shared/_error_messages.html.erb (0.4ms)
  Rendered events/new.html.erb within layouts/application (3.9ms)
  Rendered layouts/_rails_default.erb (223.3ms)
  Rendered layouts/_shim.html.erb (0.3ms)
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
  Rendered layouts/_header.html.erb (1.1ms)
  Rendered layouts/_footer.html.erb (0.4ms)
Completed 200 OK in 248ms (Views: 244.1ms | ActiveRecord: 0.2ms)

我可以看到我的服务器从我的事件控制器发送了new.html,但随后我得到了一个错误和一些其他呈现的操作。有人知道为什么会这样吗?

我在这里添加了我实现的代码,以防可能会有帮助

my_app.erb

代码语言:javascript
复制
$(".new_event_button").click(function(){
  console.log("click on add new event");
  // $("body").append("</%= escape_javascript(render 'events/new') %>");

  $("body").append("<div class='new_event_window'></div>");

  var req = new XMLHttpRequest();
  req.open("GET","/events/new.html");
  req.send();

  req.onreadystatechange = function () {
    console.log(req.readyState);
    if (req.readyState === 4) {
        $(".new_event_window").append(req.responseText);
    }
  }
});

events/new.html.erb

代码语言:javascript
复制
<h1>New Event</h1>

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_for(@event, url: create_event_path) do |f| %>
      <%= render 'shared/error_messages', object: f.object %>

      <%= f.label :title %>
      <%= f.text_field :title, class: 'form-control' %>

      <%= f.submit "Create my account", class: "btn btn-primary" %>

      <%= f.button :cancel, label: "Cancel", class: "btn btn-primary" %>
    <% end %>
  </div>
</div>

最后是我的事件控制器events_controller.erb

代码语言:javascript
复制
class EventsController < ApplicationController

  def new
    @event = Event.new
  end

  def create
  end
end
EN

回答 2

Stack Overflow用户

发布于 2018-01-12 16:23:50

试试另一种方法,比如:

在视图中使用链接

代码语言:javascript
复制
<%= link_to "view", work_path(w), remote: true %>

在您的控制器上使用respond js

代码语言:javascript
复制
respond_to do |format|
    format.js
end

在view.js.erb中

代码语言:javascript
复制
$(".new_event_window").html("<%= j(render 'events/new') %>");
$('#myModal').modal('show')
票数 0
EN

Stack Overflow用户

发布于 2018-01-12 16:50:06

你有没有试过这个:

代码语言:javascript
复制
class EventsController < ApplicationController      
  layout false, only: [:new]

  def new
    @event = Event.new
  end

  def create
  end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48221715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档