Javascript 在Rails中使用AJAX发出删除请求时,如何从表单中获取不同的id值?

Javascript 在Rails中使用AJAX发出删除请求时,如何从表单中获取不同的id值?,javascript,jquery,ruby-on-rails,ruby,ajax,Javascript,Jquery,Ruby On Rails,Ruby,Ajax,我知道我可以使用remote:这是真的,但我真的想了解AJAX的内部工作原理以及它是如何工作的。这就是这里的问题,我尝试使用表单输入向服务器发送删除请求,但每次提交操作时,我都会收到一条404消息,说没有与我尝试执行的操作匹配的路由,我知道问题在于我没有从表单元素获得正确的id值,这就是引发错误的原因。如果有人能在这件事上帮我,那就太好了。以下是我的HTML代码和表单标记: <div class="pending-study-partners"> <div id="25

我知道我可以使用remote:这是真的,但我真的想了解AJAX的内部工作原理以及它是如何工作的。这就是这里的问题,我尝试使用表单输入向服务器发送删除请求,但每次提交操作时,我都会收到一条404消息,说没有与我尝试执行的操作匹配的路由,我知道问题在于我没有从表单元素获得正确的id值,这就是引发错误的原因。如果有人能在这件事上帮我,那就太好了。以下是我的HTML代码和表单标记:

<div class="pending-study-partners">

   <div id="257">
      <img alt="Default" class="avatar-image" src="/assets/default.png" style="width:70px;">

      <span class="friend-name"><a href="/users/4">Jamil Boykins</a></span>
      - <em>Friendship is pending</em> 

      <form accept-charset="UTF-8" action="/user_friendships/257" class="edit_user_friendship"     id="edit_user_friendship_257" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"><input name="_method" type="hidden" value="delete"><input name="authenticity_token" type="hidden" value="lKp0BTPohxbRepgQmXhtwWXfxIMC8JvqpR1VnLSdz5s="></div>
        <input class="button radius tiny" name="commit" type="submit" value="Delete request">
</form> </div>  
    <div id="259">
      <img alt="Default" class="avatar-image" src="/assets/default.png" style="width:70px;">

    <span class="friend-name"><a href="/users/2">jamil shamill</a></span>
    - <em>Friendship is pending</em> 

    <form accept-charset="UTF-8" action="/user_friendships/259" class="edit_user_friendship" id="edit_user_friendship_259" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"><input name="_method" type="hidden" value="delete"><input name="authenticity_token" type="hidden" value="lKp0BTPohxbRepgQmXhtwWXfxIMC8JvqpR1VnLSdz5s="></div>
        <input class="button radius tiny" name="commit" type="submit" value="Delete request">
</form> </div>  
如果有人能确定我哪里出了问题,那就太棒了


非常感谢

我收到一条404消息,说没有匹配的路由,请检查您的日志请求要去哪里。显然url:/user\u friendships/+friend[friend.length-1]有问题。如果您添加请求日志和控制器代码,这将很有帮助。

如果您希望使用多重删除,则必须将ID作为参数数组传递:

#config/routes.rb
resources :items do 
    delete :multi_delete
end    

#app/views/controller/index.html.erb
<%= @items.each do |item| %>
   <%= content_for :div, id: item.id do %>
       <%= check_box_tag "delete", item.id %>
   <% end %>
<% end %>

<%= link_to "Delete", multi_delete_items_path, method: :delete, id: "multi_remove" %>

#app/assets/javascripts/application.js
$("#multi_remove").on("click", function() {
    $.ajax({
       url: $(this).attr("href"),
       data: $('input[name="delete"]').serialize();
    });
});

#app/controllers/items_controller.rb
def multi_delete
   ids = params[:delete]
   Item.destroy_all(ids) if defined?(ids)
end

我发现AJAX请求不起作用的原因是我试图向服务器发送一个删除请求,Rails实际上要求您发送一个POST请求并在AJAX请求中传入一个额外的数据字段,如下所示:data:{u method:DELETE}以便服务器实际删除您要针对的特定元素。这是我修改后的代码:

  $(".edit_user_friendship").on("submit", function(event){
    event.preventDefault();
    var _this = $(this);
    var friend = _this.attr('id').split("_");

    $.ajax({
      url: "/user_friendships/"+friend[friend.length-1],
      data: {"_method":"delete"},
      method: "POST",
      dataType: "json",
      success: function(data){
        console.log(data);
        _this.parent().remove();
      }
    });
  });
我希望其他人能从我的错误中吸取教训,或者说我缺乏知识。我假设Rails能够做到这一点,这样那些本机不支持更现代的HTTP谓词(如DELETE和PUT)的旧浏览器仍然可以顺利地发出这些请求

  $(".edit_user_friendship").on("submit", function(event){
    event.preventDefault();
    var _this = $(this);
    var friend = _this.attr('id').split("_");

    $.ajax({
      url: "/user_friendships/"+friend[friend.length-1],
      data: {"_method":"delete"},
      method: "POST",
      dataType: "json",
      success: function(data){
        console.log(data);
        _this.parent().remove();
      }
    });
  });