使用JavaScript将表单中的动态字段集转换为JSON

使用JavaScript将表单中的动态字段集转换为JSON,javascript,json,Javascript,Json,我有一个具有动态行数的表单。每行有3个字段,一个隐藏的id、代码和交换 <form id="form_in_question"> <table> <tr> <td>0</td> <td> <input type="hidden" id="id[]" value="123" />

我有一个具有动态行数的表单。每行有3个字段,一个隐藏的id、代码和交换

<form id="form_in_question">
    <table>
        <tr>
            <td>0</td>
            <td>
                <input type="hidden" id="id[]" value="123" />
                <input type="input" id="code[]" value="abc" />
            </td>
            <td>
               <select id="exchange[]">
                   <!-- Options... -->
               <select>
            <td>
        <tr>
        <!-- unlimited rows... -->
    </table>
</form>
因此,我可以通过AJAX将JSON对象传递给它,如:

$("#dialogEditor").dialog('option', 'buttons', {'Save' : function() {
/* Define variables */
var data = $("#form_in_question").serializeArray();
    $.ajax({
    url: 'ajax.codes.php',
    dataType: 'json',
    data: {
        action: "update_codes",
    entryId: entry,
    data: data
    },
                                            type: 'POST',
                                            success: function() {
    ui.showMsg("Codes Updated");
}
});
这就是我实际传递的JSON的样子:

data[0][name]   id[]
data[0][value]  
data[1][name]   code[]
data[1][value]  zxc
data[2][name]   exchange[]
data[2][value]  15
data[3][name]   id[]
data[3][value]  
data[4][name]   code[]
data[4][value]  BVA
data[5][name]   exchange[]
data[5][value]  5
或原始数据: 5.D D)D)D)D(5)D)和数据%5)D(D)和数据%5%5)D(D)和数据%5%5%5 5)D)D)5)D%5)D%5%5%5)D%5)D%5%5)D%5%5%5)D%5)D%5)D%5)D%5%5%5)D%5)D%5%5%5%5)D%5%5%5%5%5%5%5)D%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5价值%5D%5Bvalue%5D=BVA和数据%5B5%5D%5Bname%5D=ex更改%5B%5D和数据%5B5%5D%5B值%5D=5


我尝试了在SO上找到的方法,但它没有将3个字段分组在一起。

以下代码应该可以工作:

var data = [];
var table = $("table").get()[0];

for (var i=0; i<table.rows.length; i++) {

    var tableRow = table.rows[i];
    var rowData = {};
    var inputData = {};

    inputData["id"] = $("input[id^='id']", $(tableRow.cells[1])).val();
    inputData["code"] = $("input[id^='code']", $(tableRow.cells[1])).val();
    inputData["exchange"] = $("select[id^='exchange']",$(tableRow.cells[2])).val();

    rowData[$(tableRow.cells[0]).text()] = inputData;

    data.push(rowData);
}

console.log(JSON.stringify(data));
var数据=[];
var table=$(“table”).get()[0];

对于(var i=0;iI仅获取第一行..我还没有机会检查为什么会发生这种情况,我只是想对我的帮助和更新工作表示感谢-。请注意,在上面的代码中,该行没有结束符
。我正在获取
[{“0”:{“code”:“zxc”},{“1”:{}]
当我在我的代码中运行它时,这肯定是一个问题。我今天没有时间看它,还有一些其他问题。我现在将尝试找出问题所在。上面的html块与我的实际代码相比被极度稀释,所以我一定是意外地删掉了
。谢谢你的帮助!!!明白了,我必须继续努力n原始代码中有一些东西,但就是这样!非常感谢!
var data = [];
var table = $("table").get()[0];

for (var i=0; i<table.rows.length; i++) {

    var tableRow = table.rows[i];
    var rowData = {};
    var inputData = {};

    inputData["id"] = $("input[id^='id']", $(tableRow.cells[1])).val();
    inputData["code"] = $("input[id^='code']", $(tableRow.cells[1])).val();
    inputData["exchange"] = $("select[id^='exchange']",$(tableRow.cells[2])).val();

    rowData[$(tableRow.cells[0]).text()] = inputData;

    data.push(rowData);
}

console.log(JSON.stringify(data));