0

行数が動的なフォームがあります。各行には、非表示の ID、コード、取引所の 3 つのフィールドがあります。

<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>

次のようなオブジェクトを取得しようとしています:

data: {
    "0": {
            id: "123",
            code: "abc",
            exchange: "2"
         },
    "1": {
            id: "124",
            code: "bcd",
            exchange: "4"
         }
       }

したがって、次のように 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

または生データ: action=update_codes&ResortId=12&data%5B0%5D%5Bname%5D=id%5B%5D&data%5B0%5D%5Bvalue%5D=&data%5B1%5D%5Bname%5D=code%5B%5D&data%5B1 %5D%5Bvalue%5D=zxc&data%5B2%5D%5Bname%5D=exchange%5B%5D&data%5B2%5D%5Bvalue%5D=15&data%5B3%5D%5Bname%5D=id%5B%5D&data%5B3%5D %5Bvalue%5D=&data%5B4%5D%5Bname%5D=code%5B%5D&data%5B4%5D%5Bvalue%5D=BVA&data%5B5%5D%5Bname%5D=exchange%5B%5D&data%5B5%5D%5Bvalue %5D=5

SO で見つけた方法を試しましたが、3 つのフィールドがグループ化されませんでした。

4

1 に答える 1

0

次のコードが機能するはずです。

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));
于 2012-12-06T23:28:08.327 に答える