javascript - 如何在 Laravel 中使用 ajax 从模式中保存数据?
问题描述
我正在尝试将模式中的数据保存到数据库中,这就是我尝试过的。模态显示,表单显示,但是当我尝试保存数据时没有任何反应。在控制台中,我收到 2 个错误
- 加载资源失败:服务器响应状态为 500(内部服务器错误)
- 加载资源失败:服务器响应状态为 422(无法处理的实体)。
模态
<div class="modal fade" id="todolist-modal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h2 class="modal-title" id="todo-list-tile">Add New Todo</h2>
</div>
<div class="modal-body" id="todo-list-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-warning" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" id="todo-list-save-btn">Save changes</button>
</div>
</div>
</div>
</div>
JavaScript
$('#todo-list-save-btn').click(function(event) {
event.preventDefault();
var form = $('#todo-list-body form'),
url = form.attr('action'),
method = 'POST';
form.find('.help-block').remove();
form.find('.form-group').removeClass('has-error');
$.ajax({
url: url,
method: method,
data: form.serialize(),
success: function(response) {
},
error: function(xhr) {
var error = xhr.responseJSON;
if ($.isEmptyObject(error) == false) {
$.each(error.errors, function(key, value) {
$('#' + key)
.closest('.form-group')
.addClass('has-error')
.append('<span class="help-block"><strong>' + value + '</strong></span>')
});
}
}
});
形式
<div class="alert alert-success" id="add-new-alert" style="display:none"></div>
{!! Form::model($todoLists, ['route' => 'todolists.store']) !!}
@csrf
<div class="form-group">
<label for="" class="control-label">List Name</label>
{!! Form::text('title',
null,
[
'class' => 'form-control',
'id' => 'item',
'placeholder'=>'item'
]
)
!!}
</div>
<div class="form-group">
<label for="" class="control-label">Description</label>
{!! Form::textarea('description',
null,
[
'class' => 'form-control',
'id' => 'description',
'placeholder'=>'description',
'rows' => 2
]
)
!!}
</div>
{!! Form::close() !!}
路线
Route::resource('todolists', 'TodoController');
控制器
public function create()
{
$todoLists = new Todo();
return view ('admin.todo.form', compact('todoLists'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request, [
'title' => 'required|min:5',
'description' => 'min:5'
]);
$todoList = $request->user()
->todoLists()
->create($request->all());
return view("todolists.item", compact('todoList'));
}
解决方案
请检查您的 Todolists 模型
在您的 Todolists 模型类中:
protected $fillable = ['title', 'description'];
喜欢:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Todolist extends Model
{
protected $fillable = ['title', 'description'];
}
因为您使用create()
方法,
并再次检查您的列以确保您的数据可以插入到数据库中。
推荐阅读
- c - 如何从文件中获取替代行并将其作为字符串存储到结构中?
- c# - 我可以在/从数据库视图中更改/删除记录吗?
- javascript - 如何使用 HTML 和 JavaScript 使用 DOM 元素在运行时打印多行文本
- ruby-on-rails - 使用带有 webpacker 的引导程序自定义变量文件
- excel - Excel 宏仅格式化重复值的第一个实例
- php - 如何在laravel中对抗重复条目
- terraform - 在另一个模块中引用计数索引
- hibernate - jpa中复合主键的一对一连接
- ios - 如何以编程方式快速获得“短片”应用程序,例如垂直滚动,即没有故事板
- android - 改造不显示 POJO 响应,在 Android 中仅显示原始响应