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

GET:$.get(..)

POST:$.post()..

PUT/DELETE 呢?

【问题讨论】:

  • 最好我们也需要加载

标签: jquery httprequest put


【解决方案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 根据stackoverflow.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://stackoverflow.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 测试

            【讨论】:

              猜你喜欢
              • 2015-07-10
              • 1970-01-01
              • 2010-11-06
              • 1970-01-01
              • 1970-01-01
              • 2011-06-13
              • 1970-01-01
              • 2013-06-09
              相关资源
              最近更新 更多