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

503

GET $.get(..)

POST $.post()..

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

  • 0
    Лучше, что нам нужна загрузка
Теги:
httprequest
put

13 ответов

888
Лучший ответ

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

$.ajax({
    url: '/script.cgi',
    type: 'DELETE',
    success: function(result) {
        // Do something with the result
    }
});
  • 59
    Просто обратите внимание: если вы используете веб-сервер IIS, а запросы jquery PUT или DELETE возвращают 404 ошибки, вам необходимо включить эти глаголы в IIS. Я нашел, что это хороший ресурс: geekswithblogs.net/michelotti/archive/2011/05/28/…
  • 20
    BE AWARE: "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
Показать ещё 5 комментариев
112

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

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

Мы можем расширить 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);
})

скопируйте здесь

  • 0
    Это круто! Спасибо. Я попробовал все традиционные вариации $ .ajax, и мне не повезло. Это работает как шарм. Престижность.
  • 0
    Delete не ожидает данных, в то время как put делает, не говоря уже о том, что $ .get и $ .post могут иметь разные подписи, в то время как здесь вы жестко кодируете их в одну
Показать ещё 1 комментарий
29

Кажется, возможно с функция jQuery ajax, указав

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

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

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

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

9

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

/* 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() с адаптированным параметром метода.

5

Вот обновленный вызов 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
    }
});
5

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

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


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

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

  • 4
    Вы знаете, какие браузеры не поддерживают PUT или DELETE ?
  • 3
    Сломанные, если они не способны к HTTP: ^)
4

ajax()

найдите параметр

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

2

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

$.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
  });
}
2

Вы можете сделать это с помощью 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
  }
});
  • 3
    Это уже было сказано за годы до того, как вы опубликовали этот ответ. Это просто шум, абсолютно ничего нового.
1

Я написал плагин jQuery, который включает в себя решения, обсуждаемые здесь, с поддержкой кросс-браузера:

https://github.com/adjohnson916/jquery-methodOverride

Проверьте это!

0

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

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

Вы можете включить в свой хэш данных ключ с именем: _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')
});

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

  • 1
    Это просто делает пост.
  • 0
    Это будет работать с rails, _method используется для туннелирования http-методов через POST (хотя вам, вероятно, следует использовать это только с формами - они могут только получать / отправлять).
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню