2011-11-23 72 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.