我对此事感到困惑。
我有一个我从HTML表格构建的数组作为var weightRange = NumericRangeQuery.NewIntRange("Weight", 1, 999, true, true);
数据。
我想将该数组传递给json stringify
函数,但没有太大的成功。
我尝试了很多方法,但没有一个方法无法获取数据。
这是数据的数组:
php
// JavaScript Docume
$(document).on('click','#display_data',function(e){
var convertTableToJson = function()
{
var rows = [];
$('.table-bordered tr:has(td)').each(function(i, n){
var $row = $(n);
rows.push([
$row.find('td:eq(0)').text(),
$row.find('td:eq(1)').text(),
$row.find('td:eq(2)').text(),
$row.find('td:eq(3)').text(),
$row.find('td:eq(4)').text(),
$row.find('td:eq(5)').text(),
$row.find('td:eq(6)').text(),
$row.find('td:eq(7)').text(),
]);
});
return JSON.stringify(rows);
};
$(function(){
alert(convertTableToJson ());
});
});
我尝试将这样的代码传递给PHP
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-bordered">
<thead>
<tr>
<th>Kode Material</th>
<th>Storage Location</th>
<th>Movement Type</th>
<th>Id Indentifier</th>
<th>Item</th>
<th>Date Input</th>
<th>Netto</th>
<th>Unit</th>
<th><input type="checkbox" id="mycheckbox1" name="mycheckbox1"></th>
</tr>
</thead>
<tbody>
<tr>
<td>101200</td>
<td>WCB</td>
<td>101</td>
<td>5006540050</td>
<td>1</td>
<td>10.08.2017</td>
<td>23.970</td>
<td>KG</td>
<td><input type="checkbox" class="mycheckbox" name="mycheckbox"></td>
</tr>
<tr>
<td>101200</td>
<td>WCB</td>
<td>101</td>
<td>5006539985</td>
<td>1</td>
<td>10.08.2017</td>
<td>42.970</td>
<td>KG</td>
<td><input type="checkbox" class="mycheckbox" name="mycheckbox"></td>
</tr>
</tbody>
</table>
<button id='display_data'>Click me </button>
但是当我尝试$(document).on('click','#display_data',function(e){
var convertTableToJson = function()
{
var rows = [];
$('.table-bordered tr:has(td)').each(function(i, n){
var $row = $(n);
rows.push([
$row.find('td:eq(0)').text(),
$row.find('td:eq(1)').text(),
$row.find('td:eq(2)').text(),
$row.find('td:eq(3)').text(),
$row.find('td:eq(4)').text(),
$row.find('td:eq(5)').text(),
$row.find('td:eq(6)').text(),
$row.find('td:eq(7)').text(),
]);
});
$(".table-bordered").val(JSON.stringify(table_data));
};
var data = $(".table-bordered").val();
$.ajax({
data:data,
type:"POST",
url:"../php/tagihan/save_data.php",
dataType:"html",
success: function(data){
alert ("Data:" + data);
}
});
});
并尝试echo
时,它可以显示数组。这是我制作的print_r
代码。
php
答案 0 :(得分:0)
.table-bordered
是<table>
,您不能在表格元素上使用jQuery的.val()
函数。
从convertTableToJson
函数返回JSON字符串更有意义(就像在第一个代码示例中那样),然后调用它来填充data
变量:
var data = convertTableToJson();
您发布到服务器的数据需要是一个具有已知条目的对象,您可以在PHP中访问该条目。由于您已经尝试访问$_POST['table-bordered']
,因此我们将其命名为:
$.ajax({
data: {
'table-bordered': data
},
type:"POST",
url:"../php/tagihan/save_data.php",
dataType:"html",
success: function(data){
alert ("Data:" + data);
}
});
答案 1 :(得分:0)
您希望在table-bordered
中存在$_POST
密钥,但它不存在。您希望它存在,因为您在HTML中有一个table-bordered
,但它与您传递的内容没有关联。因此,第一步是确保此密钥存在于$_POST
:
$.ajax({
data:{"table-bordered": data},
type:"POST",
url:"../php/tagihan/save_data.php",
dataType:"html",
success: function(data){
alert ("Data:" + data);
}
});
这样我们以正确的方式传递data
,但我们需要确保data
包含我们需要的值。你不能在.val()
上为此目的使用jQuery table
,但我也没有看到将它放入HTML的重点。您可以将其存储在变量中:
$(document).on('click','#display_data',function(e){
var rows = []; //Migrated here, as we will need it later
var convertTableToJson = function()
{
$('.table-bordered tr:has(td)').each(function(i, n){
var $row = $(n);
rows.push([
$row.find('td:eq(0)').text(),
$row.find('td:eq(1)').text(),
$row.find('td:eq(2)').text(),
$row.find('td:eq(3)').text(),
$row.find('td:eq(4)').text(),
$row.find('td:eq(5)').text(),
$row.find('td:eq(6)').text(),
$row.find('td:eq(7)').text(),
]);
});
//This line will no longer be needed
//$(".table-bordered").val(JSON.stringify(table_data));
};
//Incorrect line
//var data = $(".table-bordered").val();
//Correct line, it is unnecessary though, as you can directly pass rows
//as data instead, but kept this to make sure the code is close to the
//initial version
var data = rows;
$.ajax({
data:{"table-bordered": data},
type:"POST",
url:"../php/tagihan/save_data.php",
dataType:"html",
success: function(data){
alert ("Data:" + data);
}
});
});