在刀片中我有这段代码:
usernameask
当我点击底部时,执行Ajax功能:
@foreach ($employees as $key => $employee)
<tr id="{{$employee->id}}">
<td class="visibleemployee tdcenter">
<form action="{{route('admin.employees.cambiarVisible',$employee->id)}}">
<button type="button" id="buttonchangevisible" data-id="{{$employee->id}}">
@if ($employee->public == '1')
<i class="fa fa-check" aria-hidden="true" id="margindataemployee" class="cambiarsiporno"></i>
@else
<i class="fa fa-times" aria-hidden="true" id="margindataemployee"></i>
@endif
</button>
<input type="hidden" name="_token" value="{{Session::token()}}">
</form>
</td>
</tr>
@endforeach
并调用下一个方法:
$("#buttonchangevisible").click(function(e){
e.preventDefault();
var button = $(this);
var id = button.data('id');
var formData = new FormData($(this)[0]);
$.ajax({
url:'employee/cambiarVisible/' + id,
type: 'PUT',
data: formData,
success: function() {
location.reload();
},
cache: false,
contentType: false,
processData: false
});
return false;
});
现在不会出现任何错误,如果我点击第一行,拨打电话但不要更新可见。
但如果我点击其他行,请不要拨打电话。
答案 0 :(得分:2)
我写了一段类似的代码。 我动态生成了表单,然后调用了一些JavaScript / jQuery。
生成按钮的代码:
<button class="btn btn-danger btn-block deleteUserBtn" data-name="{{ $user->name }}" data-id="{{ $user->id }}" data-type="delete" onclick="return false;"><i class="glyphicon glyphicon-trash"></i> Delete</button>
然后使用以下代码,我执行了ajax调用。将click事件附加到正文的原因是因为有多个删除按钮(这是针对具有多个删除按钮的用户概述,每个用户一个)。这些按钮可以使用jQuery生成,如果绑定到按钮,则不会触发click事件。
$('body').on('click', '.deleteUserBtn', function() {
var button = $(this) // Button that triggered the event
var id = button.data('id');
var name = button.data('name');
var csrf = $('input[name=_token]').val(); // This token is already on the page, you need a token to prevent csrf
if( confirm('Are you sure you want to delete: ' + name + '?') ) {
var url = "{{ route('overview.users.destroy', ':id') }}";
url = url.replace(':id', id);
$.ajax({
method: "DELETE",
url: url,
data: {
'id': id,
'_token': csrf
},
}).done(function(response) {
// Check if it is successful
if(response == 'deleted') {
// Reload page
location.reload();
} else {
alert('error');
console.log(response);
}
}).fail(function(response) {
alert('error 2');
console.log(response);
});
}
});
正如您所看到的,我只是将id作为参数传递。
在您的情况下,要更新用户,您只需使用以下代码:
public function cambiarVisible(Request $request, $id)
{
$employee = Worker::findOrFail($id);
$employee->public = ($employee->public == 1) ? 0 : 1;
$employee->save();
}
答案 1 :(得分:1)
您的表单看起来像是一个使用employee/cambiarVisible/{id}
作为网址的ajax提交。因为id
通配符应该是一个php变量(在JS中看不到变量),所以它不会被传递给控制器。
尝试类似
的内容 var id = {!! json_encode($employee->id) !!};
然后将网址更改为
url:'employee/cambiarVisible/' + id,