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


Answers:


924

您可以使用ajax方法:

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

65
请注意,如果您使用的是IIS网络服务器,并且jquery PUTDELETE请求返回了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方法。除非您是为古老的浏览器开发的,否则可以安全地使用除“ GET”和“ POST”之外的http方法。
马丁·卡尼

1
另外,您不能传递表单数据。它必须通过URI。
xavier 2015年

6
对于1.9之后的版本,您可以使用methodtype
网站

124

$.ajax 将工作。

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

4
需要PUTcontentType: "application/json"
KingRider

3
这个答案和达林·迪米特洛夫(Darin Dimitrov)的答案有什么区别?我认为它们是同时创建的,因此没有任何窃,但是我看不出这个答案会带来什么(除了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);
})

这里复制


删除不希望数据而放呢,不是说$不用彷徨和$。员额可以有不同的签名,而现在你在这里它硬编码到一个
旧金山Presencia

1
@FranciscoPresencia-1.删除时不希望有数据---->第三行处理此情况2. $ .get和$ .post可以具有不同的签名---->这仅创建其他jquery方法用于删除和放置。get和post有自己的jquery方法。
Mahesh


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

这是在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
您知道哪些浏览器不支持PUTDELETE吗?
莉亚·海斯

4
损坏的,如果它们不能使用HTTP:^)
XTL 2012年

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
在您发布此答案的几年前就已经说过了。这只是噪音,完全没有新内容。
暗影巫师为您耳边


0

如果您需要对$.postLaravel进行处理,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 2014年

1
这将与rails一起使用,_method用于通过POST隧道http方法(尽管您可能只应将它与表单一起使用-它们只能执行get / post)。
opsb 2014年

如果您使用POST方法从表单中进行操作,这也适用于Laravel。
约翰希普

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.