2012-01-31 4 views
2

У меня есть форма, которую я хотел бы представить как JSON через jQuery AJAX, чтобы я мог прочитать ее во временную таблицу на стороне сервера, используя собственные методы моего языка программирования (OpenEdge using READ-JSON). Пример JSON моя форма должна произвести это:Создайте пользовательскую строку JSON из формы

{"ttOrder": [ 
    { 
    "cProduct": "prod01", 
    "iQty": 123 
    }, 
    { 
    "cProduct": "prod02", 
    "iQty": 456 
    } 
]} 

Моя форма состоит из таблицы, содержащей строки информации о продукте, код продукта, описание и т.д., и поле ввода количества, например,

<input id="prod01" name="prod01" value="0"> 

От поиска вокруг Stack Overflow я нашел несколько предложений, которые выглядели как они могли бы помочь, как я думаю, что мне нужна сериализация формы:

(function($){ 
    $.fn.serializeJSON=function() { 
     var json = {}; 
     jQuery.map($(this).serializeArray(), function(n, i){ 
      json[n['name']] = n['value']; 
     }); 
     return json; 
    }; 
})(jQuery); 

var obj = {"ttOrder": [$('#prodform').serializeJSON() ]}; 

, а затем в вызове $ .ajax использовать

... 
data: JSON.stringify(obj), 
... 

Однако, это дает следующее:

{"ttOrder": [ 
    { 
    "prod01": "123", 
    "prod02": "456" 
    } 
]} 

Я думаю, что весь приведенный выше код создает строку JSON, содержащую имя ввода и значение в качестве пары значений &, но у меня нет ноу-хау, чтобы изменить код, чтобы получить меня, что я требуют.

Я думаю, что я пытаюсь создать массив объектов, где имя массива всегда равно ttOrder (сопоставляется с моим именем temp-table) (всегда cProduct - сопоставляет имя моего имени temp-таблицы) со значением имени входа, а вторая запись объекта - это количество (всегда iQty - отображает значение поля temp-table).

Извините за неверную терминологию, которую я использую.

Спасибо.

ответ

3

Первый пример близок. Это должно сработать здесь:

(function($){ 
$.fn.serializeJSON=function() { 
    return jQuery.map($(this).serializeArray(), function(i, n){ 
     var json = {}; 
     json['cProduct'] = n['name']; 
     json['iQty'] = parseInt(n['value']); 

     return json; 

    }).get(); 
}; 
})(jQuery); 

var obj = {"ttOrder": $('#prodform').serializeJSON()}; 
+0

Блестящий, и спасибо за такое быстрое решение. Он почти работает, но количество превращается в строку, то есть '{" cProduct ":" 01 "," iQty ":" 1 "}', а не '{" cProduct ":" 01 "," iQty ": 1} '. Есть ли что-нибудь, что я могу сделать по этому поводу? –

+0

Добавление parseInt вокруг n ['value'] должно выполнить трюк: json ['iQty'] = parseInt (n ['value']); –

+0

Да, он сделал это, теперь он отлично работает. Большое спасибо Брайан! –

Смежные вопросы