PUT请求和位置标头与jQuery
问题描述:
我正在尝试使用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)。
感谢您的回答。
答
您可以在成功功能(通过JavaScript的window.location.href()
)内重定向用户。
更重要的是,在这种情况下,我认为POST
比PUT
更合适。 POST
用于创建新资源,而PUT
用于创建创建或更新命名资源。
由于您不是直接命名资源,因此应该使用:POST /games
。否则,你可能想要使用类似于:PUT /game/unique-name
。