我在html表中有一些表单输入元素,如下所示:
<table>
<thead>
....
</thead>
<tr>
<td><input type="text" name="n_time" id="5030c9261eca0" value="2012" /></td>
<td><input type="text" name="n_name" id="5030c9261eca0" value="a name" /></td>
<td><textarea name="n_comment" id="5030c9261eca0">bla</textarea></td>
</tr>
</table>
现在,我需要使用$.post
将此表单数据发送到我的PHP处理页面
看起来像
if($_POST['data']){
$array = json_decode($_POST['data']);
}
所以我需要获取所有表单元素,然后以某种方式将其转换为JSON
这就是我所做的:
// assume i can get 5030c9261eca0 from my predefined vars...
$my_array = $("#5030c9261eca0").map(function () { return $(this).is("input")?$(this).val():$(this).text(); } );
//now convert
JSON.stringify($my_array);
// the conversion failed with : Uncaught TypeError: Converting circular structure to JSON
这个错误加速了:
Uncaught TypeError: Converting circular structure to JSON
我该如何解决这个问题?
另外,如果我通过HTML表单重新发送HTTP帖子,如果我有一个带有属性$_POST['n_name']
的HTML表单元素,我可以在PHP中接收像n_name
这样的表单数据,我怎样才能完成相同的操作以上?
答案 0 :(得分:1)
您有两个具有完全相同ID的不同变量, 5030c9261eca0 。对于给定的HTML页面,ID应该是唯一的。
为每个元素指定唯一ID。
相反,给每个要查找共享类的元素,例如: needToPost ,并使用该类:
$my_array = $(".needToPost").map(function () { return $(this).is("input")?$(this).val():$(this).text(); } );
答案 1 :(得分:1)
首先遍历所有tr
,然后循环所有input,textarea
并将收集的值推送到数组。
var data = [];
$('table tr').each(function(){
var row = {};
$(this).find('input,textarea').each(function(){
row[$(this).attr('name')] = $(this).val();
});
data.push(row);
});
// now you can use "data" :)
示例data
:
[0][n_time] = foo
[0][n_name] = bar
[0][n_comment] = 123
[1][n_time] = foo
[1][n_name] = bar
[1][n_comment] = 123
...
jQuery的:
$.post("test.php", { 'mydata': data } );
PHP:
foreach($_POST['mydata'] as $row) {
echo $row['n_name'];
}
将它转换为jQuery函数是个好主意:
(function( $ ) {
$.fn.tableData = function() {
var data = [];
$(this).find('tr').each(function(){
var row = {};
$(this).find('input,textarea').each(function(){
row[$(this).attr('name')] = $(this).val();
});
});
return data;
}
})( jQuery );
// Usage:
$.post("test.php", { 'mydata': $('table').tableData() } );