У меня возникла проблема с отправкой JSON в качестве параметра формы. У меня есть следующий код:
form = Ext.DomHelper.append(document.body, {
action: '/exportExcel',
cn: [
{
tag:'input',
name : 'columnsToTitles',
value : Ext.JSON.encode(exportConfig[1])
},
{
tag:'input',
name : 'reportName',
value : 'Final Reports'
}
],
method: 'exportWorkItems' || 'GET',
tag: 'form',
target: frameId
});
form.submit();
form.onload = null;
form.parentNode.removeChild(form);
Ext.JSON.encode(exportConfig [1]) оценивает следующую строку JSON
"{"title":"Title","seqTask":"SeqTask","platform":"Platform"}"
После отправки формы метод Spring MVC-контроллера получает только "{" в качестве параметра запроса "columnsToTitles". Раньше я использовал аналогичную технику кодирования, и это сработало. Не знаю, почему я просто получаю "{" в качестве параметра. Есть предположения?
Проблема в том, что DOMHelper
неправильно DOMHelper
кавычки в вашей строке JSON. Это создает поле ввода, которое выглядит как
<input name="columnsToTitles" value="{"title":"Title","seqTask":"SeqTask","platform":"Platform"}">
Эта особенность четко указана в документации
ПРИМЕЧАНИЕ. Для других произвольных атрибутов в настоящее время это значение не будет автоматически экранировано HTML до создания строки HTML элемента. Это означает, что если ваше значение атрибута содержит специальные символы, которые обычно не разрешались в значении атрибута с двойным кавычком, вы должны вручную предварительно закодировать HTML-код (см. Ext.String.htmlEncode) или создать рискованный неверный HTML-код. Такое поведение может измениться в будущей версии.
Поэтому вы можете просто избежать своего значения
form = Ext.DomHelper.append(document.body, {
action: '/exportExcel',
cn: [{
tag:'input',
name : 'columnsToTitles',
value : Ext.String.htmlEncode(Ext.JSON.encode(exportConfig[1]))
},
Тогда ваш тег ввода будет выглядеть так:
<input name="columnsToTitles" value="{"title":"Title","seqTask":"SeqTask","platform":"Platform"}">
form.submit()
не может правильно отправить формат JSON
. Вы можете использовать Ext.Ajax.Request
. Я думаю, что это лучший подход. Примером может служить в здесь.