【问题标题】:Laravel 5.4 422 (Unprocessable Entity) Ajax callLaravel 5.4 422(无法处理的实体)Ajax 调用
【发布时间】:2019-03-14 06:44:59
【问题描述】:

我正在尝试存储 cmets 并使用 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错误图片

screenshot error log in console

【问题讨论】:

  • 在发布请求之前尝试console.log( data);
  • 将以下行dd($request->all())放入function store,并将结果粘贴到这里。
  • @MayuriPansuriya 更新了 OP
  • 检查网络预览是否有错误
  • 它给出了一个验证器错误,即“body”字段是必需的,但我确实在其中发送了一些数据,正如您在日志@MayuriPansuriya 中看到的那样

标签: jquery ajax laravel laravel-5 axios


【解决方案1】:

我认为问题出在错误命名的变量上,不是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);
            });
        });
   });

【讨论】:

  • 没有同样的问题,只是复制粘贴出错我更新了 OP
  • 你能不能也做一个console.log(formData) 并把它放在问题中?
  • 使用 console.log(formData) 更新了 OP
  • 顺便说一句,如果你看到了,但你的submit 文件中有两个submit 处理程序
  • 这只是复制/粘贴的错误对不起,我更新了 OP
猜你喜欢
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 2016-01-13
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多