在Laravel中的AJAX POST请求之后,422 Unprocessable Entity错误

时间:2017-03-02 03:31:32

标签: php ajax laravel laravel-5.1

在我的网站上,用户可以回复博文。

回复时页面刷新有点烦人,所以我决定尝试ajax。但是,我收到了一个错误。

表单/标记:

func3

控制器:

lock cmpxchgq

路线:

<form data-value="{{$status->id}}" class="replyForm" role="form" action="{{ route('status.reply', ['statusId' => $status->id]) }}" method="post">
<div class="form-group">
    <textarea name="reply-{{$status->id}}" class="form-control"  placeholder="Reply to this status"></textarea>
    @if ($errors->has("reply-{$status->id}"))
        <span class="help-block">
            {{ $errors->first("reply-{$status->id}") }}
        </span>
    @endif
</div>
<input type="submit" value="Reply">
<input type="hidden" name="_token" value="{{ Session::token() }}" >
</form>

现在一切正常。但是,当我尝试将其转换为Ajax请求时:

public function postReply(Request $request, $statusId) {

    $this->validate($request, [
        "reply-{$statusId}" => 'required|max:1000|alpha_dash',
      ], [
        'required' => 'The reply body is required.'
    ]);

    $status = Status::notReply()->find($statusId);

    if (!$status) {
        return redirect()->route('home');
    }

    if (!Auth::user()->isFollowing($status->user) && Auth::user()->id !== $status->user->id){
        return redirect()->route('home');
    }

    $reply = Status::create([
        'body' => $request->input("reply-{$statusId}"),
    ])->user()->associate(Auth::user());

    $status->replies()->save($reply);
    return redirect()->back();
}

我收到以下错误:

  

POST XHR http://localhost/status/41/reply [HTTP / 1.1 422无法处理   实体184ms]

41是要回复的状态的ID。

造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:2)

从验证开始,您似乎期望reply-41作为输入字段。

"reply-{$statusId}" => 'required|max:1000|alpha_dash',

但是,根据您正在制作的ajax请求,您似乎正在传递replyValue

中的数据
data: {replyValue: $replyValue, _token:$token},

因此,验证规则失败,因为reply-41是必需的。

您可以更新服务器端以期望replyValue而不是reply-{$statusId}来解决它:

"replyValue" => 'required|max:1000|alpha_dash',
// ...
'body' => $request->input("replyValue"),