如何将数组从json stringify传递到php函数

时间:2017-08-19 15:57:32

标签: javascript php jquery json

我对此事感到困惑。

我有一个我从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

2 个答案:

答案 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);
            }
    });

});