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