我有一个项目,我可以添加多个数据。我将添加两个名字,它将显示在下一个表上。此外,我将每个数据转换为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;
}