如何在 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 网络服务器并且 jqueryPUT
或 DELETE
请求返回 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 之后的版本,您可以使用 method
或 type
【参考方案2】:
$.ajax
可以工作。
$.ajax(
url: 'script.php',
type: 'PUT',
success: function(response)
//...
);
【讨论】:
需要PUTcontentType: "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 请求方法,例如PUT
和DELETE
,这里也可以用,但是 并非所有人都支持 浏览器。
【讨论】:
你知道哪些浏览器不支持PUT
或DELETE
吗?
损坏的,如果它们不支持 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::delete
或 Route::put
,只需添加参数 "_method"="delete"
或 "_method"="put"
。
$.post("your/uri/here", "arg1":"value1",...,"_method":"delete", function(data)); ...
必须适用于其他框架
注意:使用 Laravel 5.6 和 jQuery 3 测试
【讨论】:
以上是关于如何在 jQuery 中发送 PUT/DELETE 请求?的主要内容,如果未能解决你的问题,请参考以下文章
Chrome 中的 AJAX 发送选项而不是 GET/POST/PUT/DELETE?