json2 из нескольких полей формы, получая неверные значения в jQuery - PullRequest
1 голос
/ 19 октября 2010

У меня есть настройки с несколькими полями формы ..

<input type='text' id='Trait1' >0</input>
<input type='text' id='Trait2' >1</input>
<input type='text' id='Trait3' >2</input>
<input type='text' id='Trait4' >3</input>

(данные используются только для примера)

Когда я использую

$.JSON.Stringify(form.serializeArray());

Я получаю что-то вроде ..

[{'name','Trait1','value','0'}]

и т.д.

Это плохо переводится, потому что все, кто пытается десериализовать его из json, воспринимают «имя» и «значение» как фактические объекты (где «trait1» и «0» - фактические объекты).

Что я могу сделать?

Ответы [ 4 ]

3 голосов
/ 20 октября 2010

Посмотрите на эту запись в блоге:

http://www.foreachbit.com/2010_09_01_archive.html

или короче говоря, вы можете использовать что-то вроде этого, чтобы избавиться от имен и значений:

  var formVals = $('#MyForm').serializeArray();
  var jsonObj = {};

  for (i in formVals)
    jsonObj[formVals[i].name] = formVals[i].value;

  var submitVals = $.toJSON({ "MyFormData": jsonObj });

Где $ .toJSON - метод Stringify.

О, и Харман абсолютно прав. Используйте атрибут value в своих входах.

1 голос
/ 20 октября 2010

<input type='text' id='Trait1' >0</input> - неверное использование элемента ввода. Попробуйте <input type='text' id='Trait1' value='0'/>

0 голосов
/ 23 сентября 2013

Вы можете легко перевести данные формы в строку JSON следующим образом:

allFormTags = $(document.yourFormName).serializeArray();

var myjson = {}; 
$.each(allFormTags, function() {
    myjson[this.name] = this.value;
})
0 голосов
/ 20 октября 2010

Ну, вы можете перевести это сами:

$.JSON.Stringify($.each(form.serializeArray(), function(inp) {
  var rv = {}; rv[inp.name] = inp.value; return rv;
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...