2017-08-19 37 views
0

我对这件事感到困惑。如何从json stringify传递数组到php函数

我有一个数组,我已经从HTML表格中构建为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()); 
 
    }); 
 
\t 
 
});
<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>

,我尽量让这样的代码,通过数组到PHP

$(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)); 
 
     }; 
 
\t \t 
 
\t var data = $(".table-bordered").val(); 
 
    $.ajax({ 
 
\t \t data:data, \t 
 
\t \t type:"POST", 
 
\t \t url:"../php/tagihan/save_data.php", 
 
\t \t dataType:"html", 
 
\t \t \t success: function(data){ 
 
\t \t \t \t alert ("Data:" + data); 
 
\t \t \t } 
 
    }); 
 
\t 
 
});

但它可以给我阵列显示时,我尝试echo,并尝试print_r。这是我所做的php代码。

<?php 
 
include('../../Connections/koneksi.php'); 
 

 
// reading json file 
 
$array = json_decode($_POST['table-bordered']); 
 
print_r ($array); 
 

 

 
?>

+0

@rickdenhaan像一个包含'json stringify'数据的文本框? –

+0

是的,这是一个愚蠢的解决方案。当我发布时没有任何意义;-) – rickdenhaan

+0

任何人都请告诉我如何解决这个问题 –

回答

0

.table-bordered<table>,你不能使用jQuery的.val()功能表元素。

它更有意义,只是从你的convertTableToJson函数返回的JSON字符串(如你在你的第一个代码示例做),然后调用它来填补data变量:

你邮寄到数据服务器需要是一个已知条目的对象,您可以在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); 
     } 
}); 
+0

为'php'代码我需要改变什么? –

+0

我想尝试检查数据是否正确 –

+0

不,它看起来像你的PHP代码将正常工作(假设你包含的文件不会破坏任何东西) – rickdenhaan

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包含了我们所需要的值。你不能在这个table上使用jQuery .val()来实现这个目的,但是我看不出把它放到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); 
      } 
    }); 

}); 
+0

即时通讯仍然可以从ajax调用到我的PHP数组数据。 –

+0

与上面的代码.. 问题为什么数组仍然没有传递到php ,因为ajax调用不包含'rows'中的数组。 我尝试在那里发出警报。里面的ajax'没有数组从行'和外部的ajax'其相同' –

+0

@MinervazMinevazine数据初始化与传递行,然后数据作为“表格加边界”的值传递。请检查您的浏览器的开发工具,转到网络选项卡并检查发送的参数。我期望一个名为table-bordered的参数。既然你告诉我有问题,某处出了问题,但从我的角度来看,问题还不清楚。你能告诉我你一步一步体验什么吗?你可以在你的客户端创建一个小提琴吗? –