对于我正在构建的管理面板,如果您选中或取消选中复选框,则可以使帖子显示为可见或不可见,当单击复选框时,POST请求将发送到/ posts-update-visibility方法,该方法会更新Post模型的isVisble属性。
由于某种原因,isVisible不会被更新,并且无论如何,isVisible总是返回1。
首先,通过AJAX GET调用从数据库中检索帖子:
$.ajax({
async: true,
url: '/posts',
type: 'GET',
dataType: 'JSON',
success: function (data) {
$('.row[data-link=' + linked_entry + ']').remove();
$.each(data.posts, function (index, item) {
var posts_row = '<tr class="row" data-link="posts">';
posts_row += '<td>' + item.title + '</td>';
posts_row += '<td>' + item.body + '</td>';
posts_row += '<td><div style="width:110px; height:60px; background-image:url(' + item.image + '); background-size:cover;"></div></td>';
posts_row += '<td style="text-align:center;"><input type="checkbox" class="entry_checkbox" data-link="posts" data-id="' + item.id + '" data-isVisible="' + item.isVisible + '" name="isVisible" '+(item.isVisible ? 'checked' : '')+'></td>';
posts_row += '</tr>';
$('.entry_table_container[data-link=' + linked_entry + ']').append(posts_row);
});
},
error: function (data){
var errors = data.responseJSON;
console.log(errors);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
然后,当检测到复选框状态时,我发送POST请求:
$(document).on('change', '.entry_checkbox', function() {
console.log('Checkbox state changed');
linked_entry = $(this).attr("data-link");
console.log(linked_entry);
$.ajaxSetup({
headers: { 'X-CSRF-Token' : $('meta[name=csrf-token]').attr('content') }
});
switch(linked_entry) {
case "posts":
var formData = new FormData();
formData.append('id', $(this).attr("data-id"));
formData.append('isVisible', $('.entry_checkbox[data-link=' + linked_entry + ']').is(':checked') ? 1 : 0);
$.ajax({
async: true,
cache: false,
url: '/posts-update-visibility',
type: 'POST',
data: formData,
dataType: 'JSON',
processData: false,
contentType: false,
success: function (data) {
console.log(data.success);
console.log(data.visibility);
},
error: function (data){
var errors = data.responseJSON;
console.log(errors);
}
});
break;
default:
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
我在其中更新isVisible的控制器方法(它实际上不更新任何内容,并且始终返回1,始终为$ visibility和isVisible)。
public function updateVisibility(Request $request)
{
$id = $request->id;
$post = Post::findOrFail($id);
$post->isVisible = $request->isVisible;
$post->save();
$visibility = $post->isVisible;
return response()->json([
'success' => 'Publicación actualizada correctamente',
'post' => $post,
'visibility' => $visibility,
]);
}
这是js控制台供稿:复选框状态已更改 帖子 实际的公共纠正 1
JSON响应 发表{…} 编号2 标题Titulo del segundo帖子 身体描述del segundo发布 图片img / posts / 2.jpg isVisible 1 created_at null Updated_at null 可见度1