jquery - Laravel 5.4 422(无法处理的实体)Ajax 调用
问题描述
我正在尝试使用 Ajax 调用存储评论并在同一页面上显示结果。但我在控制台中不断收到此错误
422(无法处理的实体)
让我们从我的评论模型开始:
class Comment extends Model
{
// fields can be filled
protected $fillable = ['body', 'user_id', 'image_request_id'];
/**
* Get the user that owns the Comment.
*/
public function user()
{
return $this->belongsTo('App\User');
}
}
让我们继续我的表格:
{{ Form::open(['id' => 'storeComment', 'route' => ['comments.store'], 'method' => 'POST']) }}
{!! Form::textarea('body', null, ['class'=>'form-control', 'rows' => 3]) !!}
{!! Form::hidden('image_request_id', $imageRequest->id) !!}
{{ Form::submit('Add comment', array('class' => 'btn btn-success btn-lg btn-block')) }}
{{ Form::close() }}
让我们看看控制器方法:(CommentController.php)
public function store(CommentRequest $request)
{
$comment = Auth::user()->comments()->save(new Comment($request->all()));
$response = array(
'status' => 'success',
'comment' => $comment
);
return response()->json($response);
}
我在 CommentRequest.php 中的规则方法
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'body' => 'required|max:1000',
];
}
让我们看看我们的 ajax.js
$( document ).ready(function() {
$('#storeComment').on('submit', function(e) {
e.preventDefault();
// Retrieve form data
var formData = [];
var data = $(this).serializeArray();
$.each(data, function(index, field) {
formData[field.name] = field.value;
});
// Post request with formData as data
axios.post('/comments', formData).then(function(data) {
console.log(data);
});
});
});
当我不使用 ajax 时,一切正常,并且正在存储数据。
在发布请求结果之前编辑 1 console.log(data)
0: {name: "_token", value: "1DYMMAjNAv9TqOM4ZSu8JRlVpIeImmSDcmXP4Yu7"}
1: {name: "body", value: "blabla"}
2: {name: "image_request_id", value: "2"}
编辑 2 console.log(formData) 结果
body: "blabla"
image_request_id: "2"
_token: "1DYMMAjNAv9TqOM4ZSu8JRlVpIeImmSDcmXP4Yu7"
编辑 3 错误图片
解决方案
我认为问题出在错误命名的变量中,不是temp
,而是formData
,检查下面的代码:
$( document ).ready(function() {
$('#storeComment').on('submit', function(e) {
e.preventDefault();
// Retrieve form data
var formData = {};
var data = $(this).serializeArray();
$.each(data, function(index, field) {
formData[field.name] = field.value;
});
// Post request with temp as data
axios.post('/comments', formData).then(function(data) {
console.log(data);
});
});
});
推荐阅读
- python - 使用带有 StartTLS 的 ldaptor Python 代理 - 错误 StartTLS 未实现
- python - 基于列值数据和应用条件的Pyspark过滤
- huawei-mobile-services - 华为HMS初始化无Json文件
- c++ - (C++) 这3种类型转换方法有什么区别?
- android - 如何监控资源?
- javascript - 如何仅在活动幻灯片中自动播放 YouTube 视频
- android-studio - 在android studio中选择文本后插入心情自动激活
- python - 当我使用 keras-retinanet / resnet50 获得 0.000 的 mAP 时该怎么办?
- jmeter - 如何在 Jmeter 中达到一定的 TPS
- c# - 我正在从电子表格中读取数据并将其转储到 SQL 数据库中。一列可以有空值,如何让它传递空值?