Bagaimana cara mengirim permintaan PUT / HAPUS di jQuery?

555

GET:$.get(..)

POST:$.post()..

Bagaimana dengan PUT/DELETE?

pengguna198729
sumber
Lebih baik kita perlu memuat juga
Hos Mercury

Jawaban:

924

Anda bisa menggunakan metode ajax :

$.ajax({
    url: '/script.cgi',
    type: 'DELETE',
    success: function(result) {
        // Do something with the result
    }
});
Darin Dimitrov
sumber
65
Hanya sebuah catatan, jika Anda menggunakan server web IIS dan jquery PUTatau DELETEpermintaan menghasilkan 404 kesalahan, Anda harus mengaktifkan kata kerja ini di IIS. Saya menemukan ini sebagai sumber yang bagus: geekswithblogs.net/michelotti/archive/2011/05/28/…
TimDog
22
HATI-HATI: "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."dari: api.jquery.com/jQuery.ajax/#options
andilabs
23
@andi Sesuai stackoverflow.com/questions/1757187/... browser apa pun dari IE6 mendukung metode http ini. Kecuali Anda mengembangkan peramban kuno , Anda dapat menggunakan metode http dengan aman di luar "GET" dan "POST".
Martin Carney
1
Selain itu, Anda tidak dapat mengirimkan data formulir . Itu harus melalui URI.
xavier
6
untuk versi setelah 1.9, Anda dapat menggunakan methodatautype
situs
124

$.ajax akan bekerja.

$.ajax({
   url: 'script.php',
   type: 'PUT',
   success: function(response) {
     //...
   }
});
Jacob Relkin
sumber
4
PUT diperlukancontentType: "application/json"
KingRider
3
Apakah ada perbedaan antara jawaban ini dan jawaban Darin Dimitrov? Saya berasumsi mereka berdua diciptakan pada saat yang sama, dan karena itu tidak ada plagiarisme, tetapi saya tidak melihat apa yang ditambahkan oleh jawaban ini (terlepas dari reputasi 940 untuk Jacob).
Andrew Grimm
72

Kami dapat memperluas jQuery untuk membuat pintasan untuk PUT dan 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
    });
  };
});

dan sekarang Anda dapat menggunakan:

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

salin dari sini

Stepan Suvorov
sumber
Hapus tidak mengharapkan data sementara put tidak, tidak untuk mengatakan bahwa $. Get dan $ .post dapat memiliki tanda tangan yang berbeda sementara di sini Anda membuat hardcoding ke satu
Francisco Presencia
1
@FranciscoPresencia - 1. Hapus tidak mengharapkan data sementara cant melakukan ----> Baris ketiga menangani skenario ini 2. $ .get dan $ .post dapat memiliki tanda tangan yang berbeda ----> Ini hanya membuat metode jquery tambahan untuk dihapus dan dimasukkan. dapatkan dan kirim memiliki metode jquery mereka sendiri.
Mahesh
10

Dari sini , Anda dapat melakukan ini:

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

Ini pada dasarnya hanya salinan $.post()dengan parameter metode yang disesuaikan.

pengguna2503775
sumber
9

Ini panggilan ajax yang diperbarui untuk saat Anda menggunakan JSON dengan 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
sumber
5

Anda harus dapat menggunakan jQuery.ajax:

Muat halaman jarak jauh menggunakan permintaan HTTP.


Dan Anda dapat menentukan metode mana yang harus digunakan, dengan typeopsi :

Jenis permintaan untuk membuat (" POST" atau " GET"), standarnya adalah " GET".
Catatan: Metode permintaan HTTP lainnya, seperti PUTdan DELETE, juga dapat digunakan di sini, tetapi mereka tidak didukung oleh semua browser.

Pascal MARTIN
sumber
4
Anda tahu browser mana yang tidak mendukung PUTatau DELETE?
Lea Hayes
4
Yang rusak, jika mereka tidak mampu HTTP: ^)
XTL
4

ajax ()

mencari tipe param

Metode permintaan HTTP lainnya, seperti PUT dan DELETE, juga dapat digunakan di sini, tetapi mereka tidak didukung oleh semua browser.

antpaw
sumber
3

Untuk singkatnya:

$.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
  });
}
Paul Wand
sumber
Kurasa tidak ada bidang data
Bob
1

Anda dapat melakukannya dengan AJAX!

Untuk PUTmetode:

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

Untuk DELETEmetode:

$.ajax({
  url: 'path.php',
  type: 'DELETE',
  success: function(data) {
    //play with data
  }
});
Xanarus
sumber
7
Ini sudah dikatakan bertahun-tahun sebelum Anda memposting jawaban ini. Ini hanya kebisingan, sama sekali tidak menambahkan hal baru.
Shadow Wizard adalah Telinga Untuk Anda
0

Jika Anda perlu membuat $.postkarya ke Laravel Route::deleteatau Route::puthanya menambahkan argumen "_method"="delete"atau "_method"="put".

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

Harus bekerja untuk Kerangka kerja lain

Catatan: Diuji dengan Laravel 5.6 dan jQuery 3

Marcos Regis
sumber
-1

Anda dapat memasukkan dalam hash data Anda sebuah kunci bernama: _method dengan nilai 'delete'.

Sebagai contoh:

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

Ini juga akan berlaku untuk

mumoc
sumber
3
Ini hanya melakukan posting.
ctrl-alt-delor
1
Ini akan bekerja dengan rel, _method digunakan untuk tunnel metode http melalui POST (walaupun Anda mungkin hanya menggunakan ini dengan formulir - mereka hanya bisa mendapatkan / memposting).
opsb
Ini juga akan bekerja dengan Laravel jika Anda melakukannya dari formulir dengan metode POST.
John Shipp
-1

Berikut ini adalah satu-liner sederhana yang saya gunakan untuk meletakkan lebih dari satu variabel:

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

David White
sumber
Ini tidak berfungsi dengan jQuery out-of-the-box.
Colin 't Hart
ia bekerja dalam node / express
David White