Ajax 请求时,如果表单验证失败,在前端会显示跨域问题(我已在 Laravel 设置跨域专用中间件)

在控制器里使用了表单验证 validate ,根据文档所说,当请求为Ajax而不是表单时,将会发出一个状态码为422的JSON响应

$validatedData = $request -> validate([
    "name"  => "required|string",
    "email"   => "required|email",
    "password" => "required|string|min:6|max:10",
]);

如果发送的Ajax请求内的信息格式都正确,可以正常通过验证器,那么一切正常。

$.ajax({
    type: "POST",
    contentType: "application/json;charset=UTF-8",
    url: "http://127.0.0.1:8000/register",
    data: JSON.stringify({
        name: "fuck",
        email: "805807581@qq.com",
        password: "123456"
    }),
}

});

出错来源

可是如果请求中携带的信息无法通过验证器(如少些一个@符号)按理来说会返回422的错误信息,但这里返回的是404的跨域报错

data: JSON.stringify({
    name: "fuck",
    email: "1111qq.com",
    password: "123456"
}),

没有跨域的情况

我绑定了一个视图文件用来给自己发送Ajax请求,代码一样,结果是一切正常。
也就是说没有跨域的情况下,不会出现这种错误

跨域中间件

下面是我设置的跨域中间件,用于解决CORS问题

<?php
namespace App\Http\Middleware;
use Closure;
class EnableCrossRequestMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next) {
        $response = $next($request);
        $response->header('Access-Control-Allow-Origin', '*');
        $response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, Accept');
        $response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');
        $response->header('Access-Control-Allow-Credentials', 'false');
        return $response;
    }

}

因为对这方便了解较少,始终找不出问题,希望得到解答。感谢。

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

你在中间件 return 之前,log 一下,看看出现跨域错误时,会不会输出 log

4个月前 评论
LuckyUser (楼主) 4个月前
LuckyUser (楼主) 4个月前
  • 可以试试’Access-Control-Allow-Origin’改为固定地址 不要写成 *
  • 或者将跨域改成由nginx来设置
4个月前 评论
leo

github.com/fruitcake/laravel-cors 这么好用的轮子不用为什么要自己造

4个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!