Laravel如何将多个JSON数据存储到数组中,以便控制器

时间:2015-08-20 03:00:10

标签: php arrays json laravel

我有一个可以添加多个数据的项目。例如:我将添加2个名称,它将显示在下一个表格中。我还将每个数据转换为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>

2 个答案:

答案 0 :(得分:1)

不是将所有JSON数据作为文本存储在隐藏字段中,而是为每个新名称创建一个新输入。相反,你会在你的java脚本中添加隐藏的输入,这将产生类似这样的东西

$food_name

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

$actual_food['Food']['name']

答案 1 :(得分:0)

由于评论中的字符有限。我会在这里发布我的最新一期。

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

输入示例:

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来确定行数,然后使用循环来显示行。

控制器:

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;
    }