JSON как параметр формы

1

У меня возникла проблема с отправкой 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". Раньше я использовал аналогичную технику кодирования, и это сработало. Не знаю, почему я просто получаю "{" в качестве параметра. Есть предположения?

  • 0
    Вы проверили вкладку сети, чтобы убедиться, что вся строка JSON отправляется? Почему бы вам не попробовать отправить обычную форму без Ext? Поместите JSON в одно из полей и убедитесь, что вы можете отправить форму с JSON в одно из полей. Кроме того, опубликуйте код, который вы используете для доступа к данным, отправленным по сети.
  • 0
    Я проверил вкладку сети, она не отправляет правильные данные. Я нашел следующее в «Строка параметров запроса» :: columnsToTitles: {и reportName: WI Reports
Показать ещё 2 комментария
Теги:
extjs

2 ответа

1
Лучший ответ

Проблема в том, что 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="{&quot;title&quot;:&quot;Title&quot;,&quot;seqTask&quot;:&quot;SeqTask&quot;,&quot;platform&quot;:&quot;Platform&quot;}">
  • 0
    Форма сейчас работает. Спасибо
0

form.submit() не может правильно отправить формат JSON. Вы можете использовать Ext.Ajax.Request. Я думаю, что это лучший подход. Примером может служить в здесь.

  • 0
    Пожалуйста, укажите на что-то, что вы не можете отправить JSON при отправке. Если у меня есть текстовое поле и я ввожу в него JSON, не отправит ли это без проблем? Я думаю, что более вероятно, что это проблема с кодировкой на сервере.
  • 0
    Это для загрузки файла, поэтому Ajax не будет работать. Ранее я использовал скрытую форму с полями ввода для хранения параметров, а затем отправил запрос. Работал с Ext.util.JSON.encode (ExtJS 3). Я использую ExtJS 4, который имеет только метод Ext.JSON.encode и не работает. Другое отличие в ExtJS 3, я использовал HTML для создания формы, тогда как в ExtJS4 я использую Ext.DomHelper.append
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню