在自定义数组JavaScript中创建具有未知数量输入的JSON

时间:2015-01-28 17:28:50

标签: javascript php jquery json

while($ques = mysql_fetch_array($query)){
    <input type='text' name='answers' test_id='".$ques['test_id']."' question_no ='[".$ques['question_no']."]'>
}

输出是:

<input type='text' name='answers' test_id="1" question="1" >
<input type='text' name='answers' test_id="1" question="2" >
<input type='text' name='answers' test_id="1" question="3" >

<input type='text' name='answers' test_id="2" question="1" >
<input type='text' name='answers' test_id="2" question="2" >
<input type='text' name='answers' test_id="2" question="3" >

JAVA SCRIPT IS:

var frm = $('#test-set-form');
var data = JSON.stringify(frm.serializeArray());

预期输出是:

[
    {"name":"answers","test_id":"1","question_no":"1",value":"<input value>"},
    {"name":"answers","test_id":"1","question_no":"2",value":"<input value>"},
    {"name":"answers","test_id":"1","question_no":"3",value":"<input value>"},

    {"name":"answers","test_id":"2","question_no":"1",value":"<input value>"},
    {"name":"answers","test_id":"2","question_no":"2",value":"<input value>"},
    {"name":"answers","test_id":"2","question_no":"3",value":"<input value>"},
]

我从不定数量的输入创建一个JSON并发送到服务器并将每个数据保存到数据库。一些推荐?提前谢谢。

2 个答案:

答案 0 :(得分:0)

最简单的方法是更改​​表单元素name属性以使用数组,这样您就可以:

<input name="tests[the_test_id][questions][the_question_id]" />

所以在PHP方面是$ _POST,这看起来像:

Array(
    'tests' => Array(
        'the_test_id' => Array(
            'questions' => Array(
               'the_question_id' => 'the answer value'
            )
        )
    )
)

然后你可以用以下内容阅读:

foreach($_POST['tests'] as $test_id => $testData) {
    foreach ($testData['questions'] as $question_no => $answer) {
        // update the db using $test_id, $question_no, and $answer
    }
}

因此元素的输出如下:

<?php 
     printf('<input type="text" name="tests[%s][questions][%s] />',
         $ques['test_id'],
         $ques['question_no']); ?>

通过执行此操作,您可以简单地使用来自JS的使用$(selectorForTheForm).serialize(),如果您正在执行ajax,或者只是在不需要ajax时使用默认表单提交过程。

当然,如果您出于某种原因真的需要JSON格式,那么这不是一个好主意,但如果您只需要发布表单(ajax或不是),那么这样就可以了。

如果你真的需要它以JSON格式,那么除此之外你还可以添加添加数据元素(仅仅因为它比试图从id或{{1}解析数据更容易且更不容易出错像}:

name

这将使您的输出看起来像:

<input name="tests[the_test_id][questions][the_question_id]" data-test_id="the_test_id" data-question_no="the_question_id" />

所以现在你可以在JS方面做到:

<?php 
     printf('<input type="text" name="tests[%s][questions][%s] data-test_id="%s" data-question_no="%s"/>',
         $ques['test_id'],
         $ques['question_no'],
         $ques['test_id'],
         $ques['question_no']); ?>

工作小提琴:http://jsfiddle.net/sbmejzdo/

答案 1 :(得分:0)

我像这样使用smth:

while($ques = mysql_fetch_array($query)) {
    <input type='text' value=''
        name='"answers[{$ques['test_id']}][{$ques['question_no']}]"'>
}

出:

[
    { "key":"answers[1][1]", value":"" },
    { "key":"answers[1][2]", value":"" },
    //...
    { "key":"answers[5][15]", value":"" }
    //...
]

如果你只需要使用你的符号,那么用js解析html:

var $inputs = $('#form').find('input[name=answers]');
var data = [];

$inputs.each(function() {
    var attrsData = {};
    attrsData['name'] = $(this).attr('name');
    ...
    data.push(attrsData)
});

你会得到你想要的东西

$.ajax({
    data: data
    ...
})