Laravel:复选框状态更改时发送AJAX POST请求时出现问题

时间:2018-07-11 13:17:32

标签: javascript php jquery laravel

对于我正在构建的管理面板,如果您选中或取消选中复选框,则可以使帖子显示为可见或不可见,当单击复选框时,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

0 个答案:

没有答案