php - laravel5.4 erhält eine 422-Rückgabe, wenn das Formular über Ajax gesendet wird, und Ajax kann den zurückgegebenen Inhalt nicht erfassen
PHP中文网
PHP中文网 2017-06-21 10:10:48
0
1
692

1. Senden Sie das Formular über Ajax. Wenn die Überprüfung fehlschlägt, wird ein JSON mit dem HTTP-Statuswert 422 zurückgegeben.
3. Der HTTP-Statuswert ist 422, was im Framework fest codiert zu sein scheint. Ich möchte benutzerdefiniertes JSON durch das Abfangen von Validierungsausnahmen an das Frontend zurückgeben. Ist das möglich?
4. Wenn Sie die Ajax-Methode von jquery verwenden, können Sie die Rückgabedaten immer noch nicht als JSON-Objekt formatieren, wenn ein Fehler auftritt. Sie können einen JSON nur in Form einer Zeichenfolge erhalten

PHP中文网
PHP中文网

认证0级讲师

Antworte allen(1)
伊谢尔伦

json格式这个自己根据需要定义,没有什么多说的,后面两个问题

  • http状态值422,貌似已经在框架里面写死了。我想通过捕获验证异常的形式返回自定义的json到前端,这个能实现吗?

    <?php
    namespace App\Exceptions;
    
    use Illuminate\Validation\ValidationException;
    ...
       
    class Handler extends ExceptionHandler
    {
        ...
        
        public function render($request, Exception $e)
        {
            if ($request->ajax() || $request->wantsJson()) {
                $errors = [];
                if ($e instanceof ValidationException && $e->getResponse()) {
                    try {
                        $errors = json_decode($e->getResponse()->getContent(), true);
                    } catch (\Exception $ex) {
                        $errors = $e->getResponse()->getContent();
                    }
                }
    
                return response()->json([
                    'message'     => empty($errors) ?
                        (empty($e->getMessage()) ? '出错了' : $e->getMessage())
                        : implode(',', array_first($errors)),
                    'status_code' => $e->getStatusCode(),
                    'errors'      => $errors
                ]);
            }
            ...
        }
    }
  • 利用jquery的ajax方法在error的时候还是拿不到格式化成json对象的的返回数据,只能拿到一个字符串形式的json

    $.ajax({
        ...
        dataType: "json",
        ...
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage