2011-11-23 75 views
1

我正在尝试使用jQuery提交一个PUT请求来提交一个窗体,应该在服务器上创建一个新的REST资源,它返回一个201创建一个位置标题指向新创建资源。下面是是应该处理程序请求的CoffeeScript代码:PUT请求和位置标头与jQuery

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

我可以看到请求被发送,并以正确的状态和位置标头中设置接收,但随后没有任何反应:

响应:

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

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

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

由于您不是直接命名资源,因此应该使用:POST /games。否则,你可能想要使用类似于:PUT /game/unique-name

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