如何在jQuery中发送PUT/DELETE请求?

614

GET:使用$.get(..)方法。

POST:使用$.post()..方法。

PUT/DELETE怎么办?


最好我们也需要加载。 - mercury
14个回答

1016
你可以使用ajax方法:
$.ajax({
    url: '/script.cgi',
    type: 'DELETE',
    success: function(result) {
        // Do something with the result
    }
});

69
请注意,如果您使用的是IIS Web服务器,并且jquery的PUTDELETE请求返回404错误,则需要在IIS中启用这些动词。我发现这是一个不错的资源:http://geekswithblogs.net/michelotti/archive/2011/05/28/resolve-404-in-iis-express-for-put-and-delete-verbs.aspx - TimDog
22
注意:在发送请求时需要指定请求类型("POST"或"GET"),默认为"GET"。请注意:其他HTTP请求方式,如PUT和DELETE,也可以在此使用,但并非所有浏览器都支持。来源:http://api.jquery.com/jQuery.ajax/#options - andilabs
25
根据https://dev59.com/uXI-5IYBdhLWcg3woJ5I的说法,从IE6开始,所有浏览器都支持这些HTTP方法。除非你要开发*古老的*浏览器,否则你可以放心使用除“GET”和“POST”之外的HTTP方法。 - Martin
2
此外,您无法传递表单数据。它必须通过URI进行传递。 - xavier
6
在1.9版本之后,您可以使用“method”或“type”。 - sites
仅就@xavier有关通过URI传递数据的注释进行内联,您必须将数据指定为查询字符串,如下所示url:urlCall + '?' + $.param({"Id":Id,"bolDeleteReq":bolDeleteReq})(请参见他的评论中的链接以获取完整示例)。 - chamberlainpi

135

$.ajax会起作用。

$.ajax({
   url: 'script.php',
   type: 'PUT',
   success: function(response) {
     //...
   }
});

4
需要在PUT请求中添加contentType: "application/json" - KingRider
3
这个回答和Darin Dimitrov的回答有什么区别吗?我认为它们都是同时创建的,因此没有剽窃问题,但我不明白这个回答除了给Jacob带来940声望之外还添加了什么内容。 - Andrew Grimm

79

我们可以扩展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);
})

这里复制


删除操作不需要 data,而 put 操作需要,更不用说 $.get 和 $.post 可能有不同的参数签名,而你在这里硬编码了一个。 - Francisco Presencia
2
@FranciscoPresencia -
  1. Delete不需要数据,而put需要 ----> 第三行处理了这种情况
  2. $.get和$.post可以有不同的签名 ----> 这只是为delete和put创建了额外的jquery方法。get和post有它们自己的jquery方法。
- Mahesh

31

11

您可以从这里执行以下操作:

/* 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()的副本,但使用了适应的方法参数。


10

当您在使用jQuery > 1.9与JSON时,以下是更新后的ajax调用:

$.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 请求方法,例如 PUTDELETE,也可以在此处使用,但并非所有浏览器都支持。


4
你知道哪些浏览器不支持PUT或者DELETE请求方法吗? - Lea Hayes
5
坏掉的设备,如果它们不能进行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
  });
}

没有数据字段,我猜。 - Abdulbosid

2
如果您需要将$.post应用于Laravel的Route::deleteRoute::put,只需添加一个参数"_method"="delete""_method"="put"即可。原始答案为"最初的回答"。
$.post("your/uri/here", {"arg1":"value1",...,"_method":"delete"}, function(data){}); ...

必须适用于其他框架

注:已在Laravel 5.6和jQuery 3上测试通过


注意:初始答案翻译成“最初的回答”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接