Запрос PUT и заголовок Location с помощью jQuery - PullRequest
1 голос
/ 24 ноября 2011

Я пытаюсь сделать запрос PUT с помощью jQuery для отправки формы, которая должна создать новый ресурс 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 Ответ

1 голос
/ 01 января 2012

Вы можете перенаправить пользователя в функции успеха (с помощью javascript window.location.href()).

Что еще более важно, в этом случае я думаю, что POST более уместно, чем PUT.POST используется для создания новых ресурсов, тогда как PUT используется для создания или обновления именованных ресурсов.

Поскольку выне называя ресурс напрямую, вы должны использовать: POST /games.В противном случае вы, вероятно, захотите использовать что-то вроде: PUT /game/unique-name.

См. Также этот SO-ответ для хорошего резюме POST против PUT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...