จะส่งคำร้องขอ 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."จาก: api.jquery.com/jQuery.ajax/#options
andilabs

23
@andi ตามstackoverflow.com/questions/1757187/…เบราว์เซอร์ใด ๆ จาก IE6 บนรองรับวิธีการ http เหล่านี้ นอกจากว่าคุณกำลังพัฒนาสำหรับเบราว์เซอร์โบราณคุณสามารถใช้วิธีการ http อย่างปลอดภัยนอกเหนือจาก "GET" และ "POST"
Martin Carney

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 ชื่อเสียงของยาโคบ)
Andrew Grimm

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 และ $. โพสต์สามารถมีลายเซ็นที่แตกต่างกันในขณะที่ที่นี่คุณกำลัง
ฮาร์ดโค้ด

1
@FranciscoPresencia - 1. ลบไม่ได้คาดหวังว่าข้อมูลในขณะที่ใส่ไม่ ----> บรรทัดที่สามจัดการกับสถานการณ์นี้ 2. $ .get และ $ .post สามารถมีลายเซ็นที่แตกต่างกัน ----> นี่เป็นการสร้างวิธี jquery เพิ่มเติมเท่านั้น สำหรับการลบและวาง รับและโพสต์มีวิธีการ jquery ของตัวเอง
Mahesh

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

อาแจ็กซ์ ()

มองหาประเภทพารามิเตอร์

วิธีการร้องขอ 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
  });
}

ไม่มีเขตข้อมูลฉันเดา
Bob

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

ต้องทำงานให้กับ Framework อื่น ๆ

หมายเหตุ: ทดสอบกับ Laravel 5.6 และ jQuery 3


-1

คุณสามารถรวมรหัสแฮชของข้อมูลไว้ในคีย์: _method พร้อมค่า 'ลบ'

ตัวอย่างเช่น:

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
John Shipp

-1

นี่เป็นหนึ่งซับง่าย ๆ ที่ฉันใช้ใส่ตัวแปรมากกว่าหนึ่งตัว:

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


สิ่งนี้ไม่สามารถใช้ได้กับ jQuery out-of-the-box
Colin 't Hart

มันทำงานในโหนด / ด่วน
David White
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.