Як надіслати запит PUT / DELETE в jQuery?


Відповіді:


924

Ви можете використовувати метод 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."
ЗАБЕЗПЕЧЕННЯ

23
@andi За stackoverflow.com/questions/1757187 / ... будь-який браузер з IE6 на підставках ці методи HTTP. Якщо ви не розробляєте стародавній веб-переглядач, ви можете сміливо використовувати методи http, що виходять за межі "GET" та "POST".
Мартін Керні

1
Крім того, ви не можете передавати дані форми . Він повинен пройти через URI.
xavier

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);
})

копія звідси


Видалення не очікує, що дані ставитимуться, не кажучи про те, що $ .get і $ .post можуть мати різні підписи, тоді як тут ви жорстко кодуєте їх до одного
Francisco Presencia

1
@FranciscoPresencia - 1. Видалення не очікує даних, поки ставиться ----> Третій рядок обробляє цей сценарій 2. $ .get і $ .post можуть мати різні підписи ----> Це створює лише додаткові методи jquery видалити і поставити. get and 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()з адаптованим параметром методу.


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
    }
});

5

Ви повинні мати можливість використовувати jQuery.ajax:

Завантажте віддалену сторінку за допомогою HTTP-запиту.


І ви можете вказати, який метод слід використовувати, з typeопцією :

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


4
чи знаєте ви, які браузери не підтримують PUTабо DELETE?
Lea Hayes

4
Зламані, якщо вони не здатні HTTP: ^)
XTL

4

ajax ()

шукайте тип парам

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


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
  }
});

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')
});

Це також стосуватиметься


3
Це просто займає пост.
ctrl-alt-delor

1
Це буде працювати з рейками, _method використовується для тунелювання методів http через POST (хоча, ймовірно, ви повинні використовувати це лише у формах - вони можуть лише отримувати / розміщувати).
opsb

Це також буде працювати з Laravel, якщо ви робите це з форми з методом POST.
Джон Шипп

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.