Как отправить запрос PUT / DELETE в jQuery?

555

GET:$.get(..)

POST:$.post()..

Как насчет PUT/DELETE?

user198729
источник
Лучше, если нам тоже понадобится загрузка
Hos Mercury

Ответы:

925

Вы можете использовать метод ajax :

$.ajax({
    url: '/script.cgi',
    type: 'DELETE',
    success: function(result) {
        // Do something with the result
    }
});
Дарин димитров
источник
65
Просто обратите внимание: если вы используете веб-сервер IIS, а jquery PUTили DELETEзапросы возвращают 404 ошибки, вам необходимо включить эти глаголы в IIS. Я нашел это хорошим ресурсом: geekswithblogs.net/michelotti/archive/2011/05/28/…
TimDog
22
ВНИМАНИЕ: "The type of request to make ("POST" or "GET"), default is "GET". Note: Other HTTP request methods, such as PUT and DELETE, can also be used here, but they are not supported by all browsers."от: api.jquery.com/jQuery.ajax/#options
andilabs
23
@andi Согласно stackoverflow.com/questions/1757187/… любой браузер из IE6 в поддерживает эти методы http. Если вы не разрабатываете древний браузер, вы можете безопасно использовать методы http, кроме «GET» и «POST».
Мартин Карни
1
Кроме того, вы не можете передать данные формы . Это должно пройти через URI.
Ксавьер
6
для версий после 1.9 вы можете использовать methodилиtype
сайты
124

$.ajax будет работать.

$.ajax({
   url: 'script.php',
   type: 'PUT',
   success: function(response) {
     //...
   }
});
Джейкоб Релкин
источник
4
PUT это нужноcontentType: "application/json"
KingRider
3
Есть ли разница между этим ответом и ответом Дарина Димитрова? Я предполагаю, что они были созданы одновременно, и поэтому не было никакого плагиата, но я не вижу, что этот ответ добавляет (кроме 940 репутации к Джейкобу).
Эндрю Гримм
72

Мы можем расширить jQuery для создания ярлыков для PUT и DELETE:

jQuery.each( [ "put", "delete" ], function( i, method ) {
  jQuery[ method ] = function( url, data, callback, type ) {
    if ( jQuery.isFunction( data ) ) {
      type = type || callback;
      callback = data;
      data = undefined;
    }

    return jQuery.ajax({
      url: url,
      type: method,
      dataType: type,
      data: data,
      success: callback
    });
  };
});

и теперь вы можете использовать:

$.put('http://stackoverflow.com/posts/22786755/edit', {text:'new text'}, function(result){
   console.log(result);
})

скопировать отсюда

Степан Суворов
источник
Delete не ожидает данные, в то время как put делает, не говоря уже о том, что $ .get и $ .post могут иметь разные подписи, в то время как здесь вы жестко закодируете их на одну
Francisco Presencia
1
@FranciscoPresencia - 1. Delete не ожидает данных, в то время как put делает ----> Третья строка обрабатывает этот сценарий 2. $ .get и $ .post могут иметь разные подписи ----> Это только создает дополнительные методы jquery для удаления и положить. get и post имеют свои собственные методы jquery.
Махеш
30

Кажется возможным с функцией Ajax JQuery , указав

type: "put" или type: "delete"

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

Проверьте этот вопрос для получения дополнительной информации о совместимости:

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

Пекка
источник
10

От здесь , вы можете сделать это:

/* Extend jQuery with functions for PUT and DELETE requests. */

function _ajax_request(url, data, callback, type, method) {
    if (jQuery.isFunction(data)) {
        callback = data;
        data = {};
    }
    return jQuery.ajax({
        type: method,
        url: url,
        data: data,
        success: callback,
        dataType: type
        });
}

jQuery.extend({
    put: function(url, data, callback, type) {
        return _ajax_request(url, data, callback, type, 'PUT');
    },
    delete_: function(url, data, callback, type) {
        return _ajax_request(url, data, callback, type, 'DELETE');
    }
});

Это просто копия $.post()с адаптированным параметром метода.

user2503775
источник
9

Вот обновленный вызов ajax, когда вы используете JSON с jQuery> 1.9:

$.ajax({
    url: '/v1/object/3.json',
    method: 'DELETE',
    contentType: 'application/json',
    success: function(result) {
        // handle success
    },
    error: function(request,msg,error) {
        // handle failure
    }
});
moodboom
источник
5

Вы должны быть в состоянии использовать jQuery.ajax:

Загрузите удаленную страницу с помощью HTTP-запроса.


И вы можете указать, какой метод следует использовать, с typeопцией :

Тип запроса (" POST" или " GET"), по умолчанию " GET".
Примечание. Здесь также можно использовать другие методы HTTP-запроса, такие как PUTи DELETE, но они поддерживаются не всеми браузерами.

Паскаль МАРТИН
источник
4
Вы знаете, какие браузеры не поддерживают PUTили DELETE?
Леа Хейс
4
Сломанные, если они не способны к HTTP: ^)
XTL
4

Ajax ()

искать тип параметра

Здесь также можно использовать другие методы HTTP-запроса, такие как PUT и DELETE, но они поддерживаются не всеми браузерами.

antpaw
источник
3

Для краткости:

$.delete = function(url, data, callback, type){

  if ( $.isFunction(data) ){
    type = type || callback,
    callback = data,
    data = {}
  }

  return $.ajax({
    url: url,
    type: 'DELETE',
    success: callback,
    data: data,
    contentType: type
  });
}
Пол Ванд
источник
Боб
1

Вы можете сделать это с AJAX!

Для PUTметода:

$.ajax({
  url: 'path.php',
  type: 'PUT',
  success: function(data) {
    //play with data
  }
});

Для DELETEметода:

$.ajax({
  url: 'path.php',
  type: 'DELETE',
  success: function(data) {
    //play with data
  }
});
Xanarus
источник
7
Это уже было сказано за годы до того, как вы опубликовали этот ответ. Это просто шум, абсолютно ничего нового.
Shadow Wizard - это ухо для тебя
0

Если вам нужно сделать $.postработу на Laravel Route::deleteили Route::putпросто добавить аргумент "_method"="delete"или "_method"="put".

$.post("your/uri/here", {"arg1":"value1",...,"_method":"delete"}, function(data){}); ...

Должен работать для других

Примечание: протестировано с Laravel 5.6 и jQuery 3

Маркос Регис
источник
-1

Вы можете включить в свой хэш данных ключ с именем: _method со значением 'delete'.

Например:

data = { id: 1, _method: 'delete' };
url = '/products'
request = $.post(url, data);
request.done(function(res){
  alert('Yupi Yei. Your product has been deleted')
});

Это также относится к

mumoc
источник
3
Это просто делает пост.
Ctrl-Alt-Delor
1
Это будет работать с rails, _method используется для туннелирования http-методов через POST (хотя вам, вероятно, следует использовать это только с формами - они могут только получать / отправлять).
opsb
Это также будет работать с Laravel, если вы делаете это из формы методом POST.
Джон Шипп
-1

Вот простая однострочная строка, которую я использую, чтобы поместить более одной переменной:

$.put("https://your-url.com",{item1:'new item1',item2:'new items2'});

Дэвид Уайт
источник
Это не работает с jQuery "из коробки".
Colin 't Hart
это работает в узле / экспрессе
Дэвид Уайт