php - 用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()
显示任何结果的方法。请帮我找出问题所在。
解决方案
你的 AjaxCrud 模型是什么样的?您是否设置了可填充属性以匹配您尝试传入的数据库字段名称?
为了调试 Laravel,你试过Laravel Debugbar吗?它将帮助您显示错误,我发现它对于调试 Ajax 响应非常有用。
推荐阅读
- python - 如何设置一个获取灰度图像并输出 ARGB 的图层,使其中一种灰度颜色透明?
- javascript - 在 Ionic4 React 的 onIonChange 上运行两个函数
- javascript - 用户填写结帐表单时使用 Ajax 引发错误消息
- sql - 如何取消嵌套 JSON 字段,使它们保持在相同的记录中?
- c# - 在 Unity 中为 Hoctaedron 球体添加噪声
- python - 使用python从网络摄像头修剪(删除帧)实时视频
- pyspark - 如何使用多个数据框在 Spark 中创建多个临时视图
- angular-material - 迁移到角度材料 10 时出现错误“无法解析类型实体 engcc2.matdialogmodule”
- d3.js - 直方图中最后一个 bin 的宽度小于其他 bin
- javascript - 检查js消费者端是否已经存在给定频道的ActionCable订阅的方法?