Можно ли установить куки в ответ, когда тип возвращаемого рендера установлен как 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), поэтому я знаю, что они достигли клиента.