JQuery Array发布到PHP

时间:2014-04-26 13:23:19

标签: php jquery ajax arrays

我使用Ajax 3数组发布,每列都有一个。我用PHP计算总和,然后在每个.totalCol子项中回显它。我想只发布一个名为data的数组,其中包含3列,计算sum和echo back,以及相同的行。我想让它动态,因为当我点击表的“+”按钮它会增加行和列我也想计算它。

这是我如何计算列:

HTML TABLE:

<table id="sum_table">
    <tr>
        <td><input value="0" class="sum1" /></td>
        <td><input value="0" class="sum2"/></td>
        <td><input value="0" class="sum3"/></td>
        <td class="total">0</td>
    </tr>
    <tr>
        <td><input value="0" class="sum1"/></td>
        <td><input value="0" class="sum2"/></td>
        <td><input value="0" class="sum3"/></td>
        <td class="total">0</td>
    </tr>
    <tr>
        <td><input value="0" class="sum1"/></td>
        <td><input value="0" class="sum2"/></td>
        <td><input value="0" class="sum3"/></td>
        <td class="total">0</td>
    </tr>

    <tr class ="totalCol">
        <td>0</td>
        <td>0</td>
        <td>0</td>
    </tr>

</table>
<button id="tabla">+</button>
<button id="moes">Hide/Show</button>

列的帖子:

$(document).on('change',function(){

       var col1 = [];
       var col2 = [];
       var col3 = [];

       // collect all data from table col1
       $.each($('table td input.sum1'), function(k, v){
           col1.push($(v).val());
       });

       // collect all data from table col2
       $.each($('table td input.sum2'), function(k, v){
           col2.push($(v).val());
       });

       // collect all data from table col3
       $.each($('table td input.sum3'), function(k, v){
           col3.push($(v).val());
       });

       // send data to server
       $.ajax({
           url: 'suma.php',
           type: 'post',
           data: {'col1': col1, 'col2': col2, 'col3': col3,},
           dataType: 'json',
           success: function(data){

               // insert your server-calculated data to dom
               $('.totalCol td:nth-child(1)').text(data.SumCol1);
               $('.totalCol td:nth-child(2)').text(data.SumCol2);
               $('.totalCol td:nth-child(3)').text(data.SumCol3);
           }
       }); 
});

PHP CALC:

<?php
$SumCol1 = _sumUp($_POST['col1']);
$SumCol2 = _sumUp($_POST['col2']);
$SumCol3 = _sumUp($_POST['col3']);

    echo json_encode(array(
        "SumCol1" => $SumCol1, 
        "SumCol2" => $SumCol2, 
        "SumCol3" => $SumCol3
            ));

function _sumUp($data)
{
    $sum = 0;

    foreach($data as $k => $v)
    {
        $sum += $v;
    }

    return $sum;
}
?>

提前谢谢你!

1 个答案:

答案 0 :(得分:1)

$(document).on('change',function(){

       var columnValues={}, rowValues={};
       // columnValues will look like this:
       // columnValues={columnNumber:[value, value, value]}
       // rowValues the same:
       // rowValues={rowNumber:[value, value, value]}
       // First, iterate through the rows
       $("#sum_table tr").each(function(rowIndex){
          $("td input", $(this)).each(function(colIndex){
            var value=$(this).val();
            // indexes need +1 to get the row number, because 
            // the indexes are 0-based.
            if (undefined===columnValues[colIndex+1]){
              columnValues[colIndex+1]=[];
            }
            if (undefined===rowValues[rowIndex+1]){
              rowValues[rowIndex+1]=[];
            }
            rowValues[rowIndex+1].push(value);
            columnValues[colIndex+1].push(value);
          });
       });

       // send data to server
       $.ajax({
           url: 'suma.php',
           type: 'post',
           data: {rows:rowValues, columns:columnValues},
           dataType: 'json',
           success: function(data){
               // insert your server-calculated data to dom
           }
       }); 

});

在PHP中你可以像这样访问它们:

<?php
foreach ($_POST['rows'] as $rowNumber => $values){
    // $values is an array with all the values in the row
}
foreach ($_POST['columns'] as $columnNumber => $values){
    // $values is an array with all the values in the column
}
?>

关于$.ajax中的数组: $.ajax发送的对象成为php中的数组。无论级别如何。

 $.ajax({
     url: 'arraytest.php',
     data: {
         hello: {
             foo: 'bar'
         },
         world: {
             life: 'isgreat'
         }
     }
 });

arraytest.php:

<?php
echo $_POST['hello']['foo']; // outputs bar
echo $_POST['world']['life']; // outputs isgreat

?> 

如果你想用jQuery / javascript计算列,

$(document).on('change',function(){

       var col1sum = 0;
       var col2sum = 0;
       var col3sum = 0;

       // collect all data from table col1
       $.each($('table td input.sum1'), function(k, v){
           col1sum+=parseInt($(v).val());
       });

       // collect all data from table col2
       $.each($('table td input.sum2'), function(k, v){
           col2sum+=parseInt($(v).val());
       });

       // collect all data from table col3
       $.each($('table td input.sum3'), function(k, v){
           col3sum+=parseInt($(v).val());
       });
});