Ajax请求,应该是POST还是PUT

时间:2013-06-13 10:46:15

标签: ajax jquery spring-mvc

我创建了一个Spring MVC Web应用程序。

该应用程序向控制器发出几次调用。这些电话是关闭/开放/结束游戏。

我使用Ajax进行这些调用,因此我可以在页面顶部处理响应。

ajaxPost = function (url, action, id, onSuccess, onError) {
    $.ajax({
        type: "POST",
        url: url + "?" + action + "=" + id,     
        success: function(response) {
            if(onSuccess !== null) {
                onSuccess(response);
            }
        },                                      
        error: function(e) {
            if(onError !== null) {
                onError(e);
            }                           
       }                
    });
};

我的问题是我正在使用'POST'来表示Ajax请求,这是正确的,还是应该'PUT'?

我的控制器有一个默认的URL,我正在使用param属性来决定调用哪个方法,因为页面上有很多按钮。

@RequestMapping(params = "open", method = RequestMethod.POST)

@RequestMapping(params = "close", method = RequestMethod.POST)

我对这些电话使用'POST'并不适合我。也许它应该是'PUT'......

有什么建议吗?这有关系吗?

3 个答案:

答案 0 :(得分:8)

PUT和POST都可以创建新记录; PUT还可以更新/更改现有记录。

POST和PUT之间的区别在于PUT应该使用它的ID来记录记录,以便服务器知道在创建(或更新)记录时要使用的ID,而POST期望服务器为其生成ID记录创建后将记录返回给客户端。

因此,POST作为集合发送到资源:POST /resource,而PUT发送到集合中的单个项目:PUT /resource/1

答案 1 :(得分:7)

这取决于您的请求应该做什么。因此,没有一般规则你应该使用一个而不是另一个,它们有不同的用例。

用于创建记录的

POST PUT 用于更新现有记录(或将记录放在指定位置/ ID) 有关定义,请参阅this wikipedia article

需要注意的一点是,PUT应该是幂等,多次执行相同的PUT请求应理想地产生与执行单个PUT请求相同的结果。但是,POST不是幂等的,所以做几个POST请求应该(或将会)创建多个新记录。

因此,在阅读完之后,您应该检查您的方法的作用,并选择相应的请求方法。

答案 2 :(得分:1)

使用POST。始终使用POST,除非你绝对坚定地确定托管系统正确支持PUT。