【发布时间】:2019-01-17 07:22:38
【问题描述】:
我有将附加到刀片视图codes below 的数据,它们中的每一个都被扭曲成一个表单,问题是发送到后端的数据总是来自第一个表单(不知何故,其他表单数据将被忽略) .
我的表单是什么样子的:
从第一个表单发送数据 ID = 7
从第二个表单发送数据 Still ID 7
代码
<script defer>
$(document).ready(function() {
$("body").on("click", ".savedynspecto", function(e){
var form = $(this).closest('form');
var id = form.find('input[name="product_id"]').val();
// e.preventDefault();
$.ajax({
type: "post",
url: '{{ url('admin/spacssendto') }}',
data: {
'_token': $('input[name=_token]').val(),
'product_id': id,
'subspecifications': $(this).closest('form').find('select.subspecifications').val()
},
success: function (data) {
alert('Specifications added successfully.');
},
error: function (data) {
console.log('Error!');
}
});
});
});
</script>
Controller
public function spacssendto(Request $request) {
$testingdata = $this->validate($request, array(
'product_id' => 'required',
'subspecifications' => 'required',
));
$product = Product::find($request->product_id);
$product->subspecifications()->sync($request->subspecifications, false);
return response()->json($testingdata);
}
我的表单的 HTML 输出
<tr>
<form method="POST" action="http://site.pp/admin/products/15/edit" accept-charset="UTF-8">
</form>
<input name="_token" value="DLrcOa0eOm90e4aaGSYp2uCeiuKtbGCT9fCOUP16" type="hidden">
<input name="product_id" id="product_id" value="15" type="hidden">
<td>Graphic</td>
<td>
<select class="subspecifications form-control tagsselector" id="subspecifications" name="subspecifications[]" multiple="multiple">
<option value="7">Intel 920</option>
</select>
</td>
<td class="text-center">
<button type="button" id="savedynspecto" class="savedynspecto btn btn-md btn-success"><i class="fa fa-check"></i> Save</button>
</td>
</tr>
注意:
让我好奇的是,为什么我的表单打开后立即关闭!
<tr>
<form method="POST" action="http://site.pp/admin/products/15/edit" accept-charset="UTF-8">
</form>
...
这是我的行将如何附加到刀片
var my_row = $('<tr>');
var my_html = '{{ Form::open() }}<input name="product_id" id="product_id" type="hidden" value="{{$product->id}}"><td>'+value1.title+'</td>';
my_html += '<td><select class="subspecifications form-control tagsselector" id="subspecifications" name="subspecifications[]" multiple="multiple">'+helpers+'</select></td>';
my_html += '<td class="text-center"><button type="button" id="savedynspecto" class="savedynspecto btn btn-md btn-success"><i class="fa fa-check"></i> Save</button></td>{{Form::close()}}</tr>';
my_row.html(my_html);
$('#addcustomstr').append(my_row);
如您所见,我的{{ Form::open() }} 在第一个<td> 之前,而{{Form::close()}} 就在</tr> 之前,但是为什么在它打开后就关闭了?
有什么想法吗?
【问题讨论】:
-
$('#addcustomstr').append(my_row);代码何时调用?乍一看,您使用的是{{ $product->id }},当从服务器加载时,假设为 1。如果您多次调用$('#addcustomstr').append(my_row);,每个<input>将具有相同的值 1。 -
@TimLewis 没错,因为这个想法是每个表单都有产品 ID,在这种情况下,所有产品 ID 都是相同的(我正在编辑页面中工作)
-
对对对。我现在看到了。关于无效 HTML,您实际上可以删除您的
<form>元素,为您的每个<tr>添加一个类,例如ssWrapper并在您的. savedynspecto点击函数中定位它;由于您使用的是 AJAX,因此您并不真正需要那里的表单元素。 -
@TimLewis 好的,你能给我定位那个类的样本吗?
-
这就是
<td class="ssWrapper">;我说。此外,您可以在 JS 中使用 _token: "{{ csrf_token() }}"(假设您在.blade.php文件中)
标签: php jquery ajax laravel-blade