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并发送到服务器并将每个数据保存到数据库。一些推荐?提前谢谢。
答案 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']); ?>
答案 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
...
})