请教使用Ajax提交表单使用Requests验证返回详细错误信息应该怎么写呢?

请教下laravel中如果表单使用ajax提交的话是不是就不能使用Requests服务端验证返回错误信息了啊?我使用ajax提交后如果有错误信息只会返回一个422错误,无法取得具体的错误信息给予显示,请教具体怎么实现使用ajax提交后Requests返回错误信息比如此文本框为必填之类的啊?

下面是ajax代码部分:

$.ajax({
    type: "POST",
    url: url,
    data: $("form").serialize() + '&_token={ csrf_token() }',
    cache: false,
    success: function (data) {
        alert(data);
    },
    error: function (data) {
        alert(data);
    }
});<br></br>

下面是控制器部分:

public function detailStore(Requests\CreateProductsRequest $request)
{
    $user = ['user_id' => auth()->user()->id,];
    $db = Product::create(array_merge($request->all(), $user));
    return back();
}<br></br>

下面是CreateProductsRequest验证部分:

public function rules()
{
    return [
        'item_number'=>'required',
        'price'=>'required|numeric',
        'origin'=>'required',
        'lot'=>'required|numeric'];
}<br></br>

请教下AJAX提交后验证部分未通过返回错误信息给视图并显示在相应的input下面应该怎么写啊?谢谢

daryl

此文本框必填之类的不是用js来实现更好么= =

jayleke

@daryl 我就是想知道使用ajax方式提交的数据如何使用request验证后返回错误信息

cjjian

返回 json 数据就行了吧。

Tomoe

這是我常用格式,success其實也可以省略掉,status code本身就有失敗或成功的意義。

return response()->json([
 'success' => false,
 'message' => '失敗惹...',
], 422);
Tomoe

喔喔喔~,問題沒看清楚,Request在驗證失敗後,會根據請求方式來回應
所以當CreateProductsRequest驗證失敗後,會回傳一個422的response,可以在$.ajax裡的error接收到
response內容大致上是

{
    '錯誤欄位名稱': [
        0: '驗證失敗的rule訊息'
    ]
}

一個欄位會有多個驗證,所以欄位底下的錯誤訊息是array,再根據欄位名稱來插入錯誤訊息,這部分就必須自己實現了,可以用$(selector).append()

jayleke

我自己搞定了,到时候整理好了发上来分享给大家

hehorange 回复 jayleke

请问你是怎么解决的呢?我也遇到这情况了。