如何将多个JSON数据存储到一个数组中,以便所有数据都可以被控制器接受


Laravel How to store multiple JSON data to an array so that all data can be accepted by controller

我有一个项目,我可以添加多个数据。我将添加两个名字,它将显示在下一个表上。此外,我将每个数据转换为json,以便我可以将其传递给控制器。现在我的问题是,每次我点击检查按钮控制器只能读取我输入的最后数据。是否有任何方法从表中获取所有数据并将其传递给控制器?这是我的脚本。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body>
 <script type="text/javascript">
  $(document).ready(function(){
    $("#submit-button").click(function(){
      var data = $('#form_id').serializeArray();
      var obj = {};
      for (var i = 0, l = data.length; i < l; i++) {
          obj[data[i].name] = data[i].value;
      }
      var json_text = JSON.stringify(obj);
      $('#submit-button').after('<pre>' + json_text + '</pre>'); //shows only to determine if its working.
      $('table.footable tbody').append('<tr><td><input type="hidden" name="request" value='+json_text+'></td> <td>'+obj['firstname']+'</td><td>'+obj['lastname']+'</td></tr>');
      $("#firstname").val('');
      $("#lastname").val('');
    })
  })
 </script>
<form id="form_id">
    <label for="firstname">First Name:</label>
    <input type="text" id="firstname" name="firstname" value="" placeholder="Max" required="required" autofocus="autofocus" />
    <label for="lastname">Last Name:</label>
    <input type="text" id="lastname" name="lastname" value="" placeholder="Max" required="required" autofocus="autofocus" />
    <input type="button" value="submit" id="submit-button" />
</form>
<div id="table">
<h2>List of all person</h2>
<form method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}"> 
<table class="footable">
    <thead>
        <tr>
            <th data-class="expand"> First Name </th>
            <th> Last Name </th>
        </tr>
    </thead>
    <tbody>
    </tbody>
</table>
<button class="btn btn-lg btn-primary btn-sm">Check</button>
</form>
</div>
</body>
</html>

不是将所有JSON数据作为文本存储在隐藏字段中,而是为每个新名称创建一个新的输入。相反,您可以在java脚本中添加隐藏输入,这将导致如下内容

<input type="hidden" name="name[0]">
<input type="hidden" name="name[1]">

在您的控制器中,您可以使用以下命令(基于使用请求laravel5)

public function myFunction(Request $request) {
    foreach($request['name']  as $name) 
    {
        //do something with your name variable
    } 
} 

由于注释中的字符有限。我将在这里发布我的最新一期。

我不知道它是否正确。这是我最新的代码

输入例子:

Firstname   Lastname
Kerwin      Manisan
Ivan        Sanchez
Javascript

$('table.footable tbody').append('<tr><td><input type="text" name="firstname[]" value="'+obj['firstname']+'"></td><td><input type="text" name="lastname[]" value="'+obj['lastname']+'"></td></tr>');

控制器:

public function test(Request $request){
    return $data = $request->input('firstname');
}
结果:

["Kerwin","Ivan"]

遗憾地说,我需要的输出是这样的。

[{"firstname":"Kerwin","lastname":"Manisan"},{"firstname":"Ivan" , "lastname":"Sanchez"}]

编辑:问题解决了。我使用count来确定有多少行,然后使用loop来显示行。

控制器:

public function test(Request $request){
        $count = count($request->input('firstname'));
        for ($i=0; $i<$count; $i++){
            $data[] = array('firstname' => $request->input('firstname')[$i], 'lastname' => $request->input('lastname')[$i]);
        }
        return $data;
    }