Делаете запрос DELETE из тега <a>без построения форм? - PullRequest
3 голосов
/ 15 июня 2010

Есть ли способ заставить <a href> сделать запрос на удаление при нажатии вместо обычного GET?

Способ "Rails" состоит в том, чтобы динамически генерировать тег <form>, который добавляет соответствующие параметры, чтобы он направлялся в нужное место, однако я не слишком люблю много манипуляций с DOM для такой простой задачи.

Я думал о маршруте что-то вроде:

$("a.delete").click(function(){
    var do_refresh = false;
    $.ajax({
        type: "DELETE",
         url: "my/path/to/delete",
     success: function(){
                  do_refresh = true;
              },
     failure: function(){
                  alert("There is an error");
              }
    });
    return do_refresh; //If this is false, no refresh would happen. If it
                      //is true, it will do a page refresh.
});

Я не уверен, будет ли работать вышеупомянутый AJAX, так как это просто теоретически. Есть ли способ пойти по этому поводу?

Примечание:
Пожалуйста, не рекомендую использовать рельсы :method => :delete на link_to, так как я пытаюсь избежать использования помощников рельсов во многих смыслах, поскольку они загрязняют ваш DOM с помощью навязчивого JavaScript. Я хотел бы, чтобы это решение было помещено во внешний файл JS и включено по мере необходимости.

Ответы [ 3 ]

2 голосов
/ 15 июня 2010

По документам:

http://api.jquery.com/jQuery.ajax/

метод DELETE разрешен, но не поддерживается во всех браузерах, поэтому вам следует взглянуть здесь:

Доступны ли методы PUT, DELETE, HEAD и т. Д. В большинстве веб-браузеров?

1 голос
/ 05 марта 2017

Вы можете использовать плагин RESTInTag , он будет выполнять запросы ajax для вас, все, что вам нужно сделать, это добавить пару дополнительных атрибутов к вашему HTML-тегу

Пример:

HTML

<button class="delete" data-target="my/path/to/delete" data-method="DELETE" data-disabled="true">Delete Article</button>

JavaScript

$(".delete").restintag(optionsObj, function() {
    do_refresh = true
},
function() {
    alert("some error happened");
});
1 голос
/ 15 июня 2010

Вот что я делаю:

$("a.delete").live('click', function() {
        $.post(this.href, "_method=delete", function(data) {
            //do refresh
        });
        return false;
    })

Но я действительно не знаю, какие браузеры его поддерживают, а какие нет.Я протестировал его на Mac с Firefox 2 и 3.6, safari 3 и chrome beta 5.0.375.70, и он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...