用rails中的ajax刷新div

我有一个todo类型的应用程序,在他们的div任务有p id =“task _”+ 子任务。我有一个表单,用于在我的项目的每个显示页面创建一个新的子任务。

要理解这一点,我正在使用的代码

它是项目的show.html.erb

 
    @project %>

这是部分项目

  task %>  

然后他们是部分任务

  <div class="span5 tasks" id='tasks_'> <div class="addtaskdiv" id="addtaskdiv_"> 

subtask %> <!--

<a data-id='' href="#" style="float:right;">

<div class="subtaskform" id="subtask_form_" style="width:218px;margin:0 2px 0px 3px;"> true do |f| %> <a data-id='' href="#">
<p class="addcard" id="addcard_"><a href="#" data-id='' id='add_card_'>Add a card...

最后这里是子任务的部分内容

   

这是我的子任务控制器创建方法

  def create @task=Task.find(params[:task_id]) @project=@task.project @subtask=@task.subtasks.create(params[:subtask]) respond_to do |format| if @subtask.save format.html{redirect_to @project} format.js flash[:success]="Task created successfully" else render new end end end 

这是ajax调用的create.js.erb文件

  $('#adddtaskdiv_'+ ).append('@subtask) %>'); 

我希望当我创建一个子任务时,它应该在没有刷新我的页面的情况下呈现。但不知何故它在这里不起作用。我看到它看起来正确的日志,但浏览器上似乎没有任何工作。

这是我点击保存子任务后轨道控制台日志的图像 在此处输入图像描述

这就是ui现在的样子

在此处输入图像描述

这里可能存在一系列问题:

  1. 您的Ajax ping是哪个URL?
  2. 您的create方法实际上是在create记录吗?
  3. 是否有create.js.erb加载?

阿贾克斯

这是Ajax的低调 –

Rails通过HTTP“请求”工作 。 每次向应用程序发送“请求”时,它都会返回与该请求中的数据相对应的数据

这意味着如果要将新数据附加到页面(无需刷新),则需要以某种方式发送请求(Ajax)

Ajax基本上就是Javascript,就像一个伪浏览器; 代表您向服务器发送请求(异步),允许您回调数据并将其附加到DOM

url

  <%= form_for [task, task.subtasks.build],:remote => true do |f| %> <%= f.text_area :name,rows:'3',cols:'3'%> <%= f.submit "save",class:'btn btn-success' %>  <% end %> 

您正在使用Rails内置Ajax ,但我们需要知道它将在哪个路由上ping。 您需要向我们显示Ajax将数据发送到哪个URL。 我认为您的问题的一部分可能task.subtasks.build调用有关


创建

您的create方法可以稍微重构一下:

 #app/controllers/subtasks_controller.rb def create @task= Task.find(params[:task_id]) @project = @task.project @subtask = @task.subtasks.new(subtask_params) @subtask.save respond_to do |format| format.html{redirect_to @project, flash[:success] = "Task created successfully"} format.js # -> you can't send the Flash object through xhr end end private def subtask_params params.require(:subtask).permit(:name) end #app/models/subtask.rb Class SubTask < ActiveRecord::Base validates :name, presence: true # -> Causes forms to fail gracefully end 

创建JS

如果你的create方法正常,问题可能出在你的JS上:

 #app/views/subtasks/create.js.erb $('#addtaskdiv_'+ <%=@task.id %>).append('<%=j render partial: "subtasks/partial_name", object: @subtask %>'); 

部分问题是您将@subtask实例变量发送到部分。 我认为你不能这样做(可能是错的)。 您需要为partial调用绝对路径,并将实例var作为对象传递

Interesting Posts