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

Posted

技术标签:

【中文标题】如何在 jQuery 中发送 PUT/DELETE 请求?【英文标题】:How to send a PUT/DELETE request in jQuery? 【发布时间】:2011-01-10 08:49:45 【问题描述】:

GET:$.get(..)

POST:$.post()..

PUT/DELETE 呢?

【问题讨论】:

最好我们也需要加载 【参考方案1】:

您可以使用ajax 方法:

$.ajax(
    url: '/script.cgi',
    type: 'DELETE',
    success: function(result) 
        // Do something with the result
    
);

【讨论】:

请注意,如果您使用 IIS 网络服务器并且 jquery PUTDELETE 请求返回 404 错误,则需要在 IIS 中启用这些动词。我发现这是一个很好的资源:@​​987654322@ 注意:"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 @andi 根据***.com/questions/1757187/…,任何来自 IE6 的浏览器都支持这些 http 方法。除非您正在为 ancient 浏览器进行开发,否则您可以安全地使用“GET”和“POST”之外的 http 方法。 另外,you can't pass in form data。它必须通过 URI。 对于 1.9 之后的版本,您可以使用 methodtype【参考方案2】:

$.ajax 可以工作。

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

【讨论】:

需要PUT contentType: "application/json" 这个答案和 Darin Dimitrov 的有什么区别吗?我假设它们都是同时创建的,因此没有任何抄袭,但我看不出这个答案增加了什么(除了雅各布的 940 声望)。【参考方案3】:

似乎可以通过指定JQuery's ajax function

type: "put"type: "delete"

并非所有浏览器都支持,但大多数浏览器都支持。

查看此问题以了解有关兼容性的更多信息:

Are the PUT, DELETE, HEAD, etc methods available in most web browsers?

【讨论】:

【参考方案4】:

ajax()

寻找参数类型

这里也可以使用其他HTTP请求方法,例如PUT和DELETE,但并非所有浏览器都支持。

【讨论】:

【参考方案5】:

你应该可以使用jQuery.ajax

使用 HTTP 加载远程页面 请求。

您可以使用type option 指定应该使用哪种方法:

要发出的请求类型(“POST”或 “GET”),默认为“GET”。 注意:其他 HTTP 请求方法,例如PUTDELETE,这里也可以用,但是 并非所有人都支持 浏览器。

【讨论】:

你知道哪些浏览器不支持PUTDELETE吗? 损坏的,如果它们不支持 HTTP :^)【参考方案6】:

您可以在数据散列中包含一个名为:_method,值为“删除”的键。

例如:

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

这也适用于

【讨论】:

这只是一个帖子。 这将适用于 Rails,_method 用于通过 POST 隧道 http 方法(尽管您可能应该只将它用于表单 - 它们只能执行 get/post)。 这也适用于 Laravel,如果您使用 POST 方法从表单中执行此操作。【参考方案7】:

来自here,您可以这样做:

/* 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()的一个副本,方法参数已调整。

【讨论】:

【参考方案8】:

我们可以扩展 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://***.com/posts/22786755/edit', text:'new text', function(result)
   console.log(result);
)

从here复制

【讨论】:

Delete 不需要 data 而 put 不需要,并不是说 $.get 和 $.post 可以有不同的签名,而在这里您将其硬编码为一个跨度> @FranciscoPresencia - 1. delete 不需要数据,而 put 需要 ----> 第三行处理这种情况 2. $.get 和 $.post 可以有不同的签名---- > 这只是为删除和放置创建额外的 jquery 方法。 get 和 post 有自己的 jquery 方法。【参考方案9】:

我编写了一个 jQuery 插件,它结合了此处讨论的解决方案和跨浏览器支持:

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

看看吧!

【讨论】:

【参考方案10】:

你可以用 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
  
);

【讨论】:

在您发布此答案之前几年就已经说过了。这只是噪音,完全没有添加任何新内容。【参考方案11】:

为简洁起见:

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

【讨论】:

我猜没有数据字段【参考方案12】:

当您在 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
    
);

【讨论】:

【参考方案13】:

如果您需要将 $.post 用于 Laravel Route::deleteRoute::put,只需添加参数 "_method"="delete""_method"="put"

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

必须适用于其他框架

注意:使用 Laravel 5.6 和 jQuery 3 测试

【讨论】:

以上是关于如何在 jQuery 中发送 PUT/DELETE 请求?的主要内容,如果未能解决你的问题,请参考以下文章

在web前端怎么发送http协议的put delete请求

Chrome 中的 AJAX 发送选项而不是 GET/POST/PUT/DELETE?

可以发送 PUT/DELETE 方法的负载测试工具

text GET-POST-PUT,DELETE,在-ASP-NET-MVC与 - jQuery的

在web前端怎么发送http协议的put delete请求

nginx proxy_pass基于请求方法是POST,PUT还是DELETE