установка куки, когда тип рендеринга "contentType: text / json" - PullRequest
0 голосов
/ 03 февраля 2010

Можно ли установить куки в ответ, когда тип возвращаемого рендера установлен как json?

Я могу установить куки на объекте ответа при возврате со стандартным типом рендеринга, и позже я смогу вернуть его при следующем запросе. Однако, если бы я установил куки при рендеринге возвращаемых значений как json, я не смог бы вернуть куки на следующий объект запроса. Что здесь происходит?

Эти два действия работают, как и ожидалось, когда basicForm выполняет обычную форму отправки сообщения в действие, withRegularSubmit, когда пользователь нажимает на кнопку submit.

// first action set the cookie and second action yields the originally set cookie
def regularAction = {
  // using cookie plugin
  response.setCookie("username-regular", "regularCookieUser123",604800); 
  return render(view: "basicForm");
}

// called by form post
def withRegularSubmit = {
  def myCookie = request.getCookie("username-regular"); 
  // returns the value 'regularCookieUser123'
  return render(view: "resultView");
}

Когда я переключаюсь на настройку cookie непосредственно перед возвратом из ответа с помощью json, я не получаю cookie с сообщением.

Запрос начинается с получения html-документа, содержащего форму, и когда запускается событие загрузки документа, через javascript вызывается следующий запрос с jQuery, подобным этому:

var someUrl = "http://localhost/jsonAction";
$.get(someUrl, function(jsonData) { // do some work with javascript}

Работа контроллера:

// this action is called initially and returns an html doc with a form. 
def loadJsonForm = {
  return render(view: "jsonForm");
}

// called via javascript when the document load event is fired
def jsonAction = {
  response.setCookie("username-json", "jsonCookieUser456",604800); // using cookie plugin
  return render(contentType:'text/json') { 'pair'('myKey': "someValue") };
}

// called by form post
def withJsonSubmit = {
  def myCookie = request.getCookie("username-json"); 
  // got null value, expecting: jsonCookieUser456
  return render(view: "resultView");
}

Данные возвращаются на сервер в результате нажатия пользователем кнопки «Отправить», а не посредством скрипта. Перед отправкой «withRegularSubmit» и «withJsonSubmit» я вижу файлы cookie, хранящиеся в браузере (Firefox), поэтому я знаю, что они достигли клиента.

1 Ответ

0 голосов
/ 03 февраля 2010

Я понял, в чем проблема - плагин cookie не устанавливает путь для куки, поэтому он сохраняется с помощью «сервер / контроллер / действие», тогда как при последующем запросе, когда я спрашиваю куки, плагинвозвращает файлы cookie, связанные с путем нового запроса.

Изменение кода плагина, чтобы файлы cookie сохранялись с помощью одинаковых путей.

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