簡體   English   中英

如何使用AJAX刪除Sinatra Ruby應用程序中的帖子?

[英]How to use AJAX to delete a post in a Sinatra Ruby app?

我正在嘗試使用AJAX在Sinatra上的簡單Ruby應用程序中刪除帖子。

這是我的刪除路線,尚未進行任何AJAX調用:

delete '/posts/:id' do
  id = params[:id]
  post = Post.find(id)

  post.destroy
  redirect '/posts'

end

這是我要刪除的JS文件中的內容:

  $('.post-container').on('submit', '.delete-form', function(event){
    event.preventDefault();
    var url = $(this).attr('action'),

        data = $(this).serialize();
        $.ajax({
          url: url,
          type: 'post',
          data: data
        })
        .success(function(response){
          $('.post-container').remove(response);
        }.bind(this))
        .fail(function(status, xhr, error){

        })
  })

這是我的index.erb

<header>
  <h1>Hacker News</h1>
  <p>
    <a href="#posts">new</a>
    <a href="#">comments</a>
    <a href="#">popular</a>
    <a href="#">login</a>
  </p>
</header>


<div class='post-container'>
  <% @posts.each do |post| %>
  <%= erb :'_post' , locals: {post: post}%>
  <% end %>
</div>

<form id="posts" method="post" action="/posts">
  <input type="text" name="title" placeholder="title">
  <input type="submit" value="submit new post">
</form> 

而我的部分包含刪除形式:

<article id="<%= post.id %>">
  <form method="post" action='/posts/<%= post.id %>/vote' class="inline">
    <button type="submit" name="submit_param" value="submit_value" class="fa fa-sort-desc vote-button upvote-button"></button>
  </form>
  <h2><a href='/posts/<%= post.id %>'><%= post.title %></a></h2>
  <p>
    <span class='points'><%= post.points %></span>
    <span class='username'><%= post.username %></span>
    <span class='timestamp'><%= post.time_since_creation %></span>
    <span class='comment-count'><%= post.comment_count %></span>
    <!-- <a class="delete" href='/posts/<%= post.id %>'></a> -->

    <form action='/posts/<%= post.id %>' method='post' class='delete-form'>
      <input type="hidden" name="_method" value="delete">
      <input type="submit" value="delete">
    </form>
  </p>
</article>

我知道我必須打電話給.xhr嗎? 在路線中,但是我不確定在哪里繪制什么。 另外,如何避免使用AJAX時要刪除的隱藏輸入法。 我希望這是足夠的信息。 謝謝。

似乎您正在發送HTTP POST請求,但Sinatra希望收到DELETE請求。 兩種選擇:

將您的Jquery ajax請求更改為:

    $.ajax({
      url: url,
      type: 'DELETE', // Change this
      data: data
    })

或者,如果您想保留現有的Javascript代碼,請將您的Sinatra應用程序更改為:

post '/posts/:id' do  # Change delete to post
...

GET,POST,DELETE和PUT是標准的Http請求,您可以使用post或delete獲得所需的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM