首页 > 解决方案 > 用ajax发送数据后,数据没有保存到mysql数据库中。无法弄清楚是什么问题

问题描述

我正在尝试在 laravel 中使用数据表开发 Ajax CRUD。我只发送了一些字段(名字、姓氏和图像)就成功了。但是对于所有其他字段,没有数据正在存储。也没有错误信息。所以我不知道我在哪里搞砸了。

服务器端验证正在工作。但在那之后没有错误消息或活动。我试图从控制器存储数据而不直接从 $request 分配数据。(即“性别”=>“男性”)。但不工作项目链接: https ://drive.google.com/open?id=1KclRdYFL-xwS1w0T2xXmljQGjBhGuTH_

数据库表: 数据库

HTML 表单:

<form method="post" id="sample_form" class="form-horizontal" enctype="multipart/form-data">
            @csrf
            <div class="form-group">
                <label class="control col-md-4" >First Name : </label>
                <div class="col-md-8">
                    <input type="text" name="first_name" id="first_name" class="form-control" required/>
                </div>
            </div>
            <div class="form-group">
                <label class="control-label col-md-4">Last Name : </label>
                <div class="col-md-8">
                    <input type="text" name="last_name" id="last_name" class="form-control" required/>
                </div>
            </div>
             <div class="form-group">
                 <label class="control-label col-md-4">Email : </label>
                 <div class="col-md-8">
                     <input type="email" name="email" id="email" class="form-control" required />
                 </div>
             </div>
             <div class="form-group">
                 <label class="control-label col-md-4">Mobile No : </label>
                 <div class="col-md-8">
                     <input type="number" name="mobile" id="mobile" class="form-control" />
                 </div>
             </div>
             <div class="form-group">
                 <label class="control-label col-md-4">Address : </label>
                 <div class="col-md-8">
                    <textarea name="address" id="address" rows="3" class="form-control" required></textarea>
                 </div>
             </div>
             <div class="form-group">
                 <label class="control-label col-md-4">Gender : </label>
                 <div class="col-md-8">
                     <div class="btn-group btn-group-toggle" data-toggle="buttons">
                         <label class="btn btn-secondary">
                             <input type="radio" name="gender" value="male" id="gender" autocomplete="off"> Male
                         </label>
                         <label class="btn btn-secondary">
                             <input type="radio" name="gender" value="female" id="gender" autocomplete="off"> Female
                         </label>
                     </div>
                 </div>
             </div>
             <div class="form-group">
                 <label class="control-label col-md-4">Hobbies : </label>
                 <div class="col-md-8">
                 <div class="checkbox">
                     <label><input type="checkbox" name="hobbies[]" value="Swimming">Swimming</label>
                 </div>
                 <div class="checkbox">
                     <label><input type="checkbox" name="hobbies[]" value="Reading">Reading</label>
                 </div>
                 <div class="checkbox">
                     <label><input type="checkbox" name="hobbies[]" value="Gardening">Gardening</label>
                 </div>
                 </div>
             </div>
            <div class="form-group">
                <label class="control-label col-md-4">Select Profile Image : </label>
                <div class="col-md-8">
                    <input type="file" name="image" id="image" required />
                    <span id="store_image"></span>
                </div>
</div>
<br />
<div class="form-group" align="center">
    <input type="hidden" name="action" id="action" />
    <input type="hidden" name="hidden_id" id="hidden_id" />
    <input type="submit" name="action_button" id="action_button" class="btn btn-warning" value="Add" />
</div>
</form>

控制器中的存储方法:

 public function store(Request $request)
    {

        $rules = array(
            'first_name'    =>  'required|min:4',
            'last_name'     =>  'required|min:4',
            'address'       =>  'required',
            'mobile'        =>  'required|min:9|max:13',
            'image'         =>  'required|image|max:2048',
            'email'         =>  'required|unique:ajax_cruds',
        );
        $hobbies = implode(',',$request->hobbies);
        $error = Validator::make($request->all(), $rules);

        if($error->fails())
        {
            return response()->json(['errors' => $error->errors()->all()]);
        }

        $image = $request->file('image');

        $new_name = rand() . '.' . $image->getClientOriginalExtension();

        $image->move(public_path('images'), $new_name);


            $form_data = array(
                'first_name'        =>  $request->first_name,
                'last_name'         =>  $request->last_name,
                'image'             =>  $new_name,
                'address'           =>  $request->address,
                'gender'           =>  $request->gender,
                'number'           =>  $request->mobile,
                'hobbies'           =>  $hobbies,
                'email'           =>  $request->email
            );


            AjaxCrud::create($form_data);


        return response()->json(['success' => 'Data Added successfully.']);
    }

Javascript:

$('#sample_form').on('submit', function(event){
            event.preventDefault();
            if($('#action').val() == 'Add')
            {
                $.ajax({
                    url:"{{ route('ajax-crud.store') }}",
                    method:"POST",
                    data: new FormData(this),
                    contentType: false,
                    cache:false,
                    processData: false,
                    dataType:"json",
                    success:function(data)
                    {
                        var html = '';
                        if(data.errors)
                        {
                            html = '<div class="alert alert-danger">';
                            for(var count = 0; count < data.errors.length; count++)
                            {
                                html += '<p>' + data.errors[count] + '</p>';
                            }
                            html += '</div>';
                        }
                        if(data.success)
                        {
                            html = '<div class="alert alert-success">' + data.success + '</div>';
                            $('#sample_form')[0].reset();
                            $('#user_table').DataTable().ajax.reload();
                        }
                        $('#form_result').html(html);
                    }
                })
            }

好吧,我想查看$request变量中的所有数据。但也dd()没有var_dump()显示任何结果的方法。请帮我找出问题所在。

标签: phpajaxlaraveldatatables

解决方案


你的 AjaxCrud 模型是什么样的?您是否设置了可填充属性以匹配您尝试传入的数据库字段名称?

为了调试 Laravel,你试过Laravel Debugbar吗?它将帮助您显示错误,我发现它对于调试 Ajax 响应非常有用。


推荐阅读