使用jQuery PUT请求和Location头

时间:2011-11-23 22:08:33

标签: jquery rest

我正在尝试使用jQuery发出一个PUT请求,以提交一个表单,该表单应该在服务器上创建一个新的REST资源,该表单将返回一个201 Created,其中Location头指向新创建的资源。这是应该处理请求的coffeescript代码:

  createNewGame = (name) ->
     $.ajax({        
        url: "/games",
        type: "PUT",
        data: { game: name },
        dataType: "json",
        success: succ,
        error: err})

我可以看到发送和接收的请求具有正确的状态和Location头设置但是没有任何反应:

回应:

 Server Warp/0.4.5
 Set-Cookie Game=game123; HttpOnly
 Location   http://localhost:5678/resources/html/game.html
 Content-Type   application/json
 Transfer-Encoding  chunked

请求:

Host    localhost:5678
User-Agent  Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Accept  application/json, text/javascript, */*; q=0.01
Accept-Language en,en-us;q=0.8,fr;q=0.5,fr-fr;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection  keep-alive
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With    XMLHttpRequest
Referer http://localhost:5678/resources/html/index.html
Content-Length  12

如果我使用302响应,那么jQuery会跟随响应的Location标题,但是我应该如何告诉页面加载答案中指向的页面?当然,我可以使用不同的机制(例如POST查询),我知道我的请求不符合REST,因为请求的url应指向特定的资源,但我想更好地理解我认为的问题PUT是正确的动词(我可以在客户端上构建要创建的资源的URI)。

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

您可以在成功功能中重定向用户(通过javascript的window.location.href())。

更重要的是,在这种情况下,我认为POSTPUT更合适。 POST用于创建新资源,PUT用于创建更新命名资源。

由于您没有直接命名资源,因此您应该使用:POST /games。否则,您可能希望使用以下内容:PUT /game/unique-name

另见this SO answer for a good summary of POST vs PUT.