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;
}
}
因为对这方便了解较少,始终找不出问题,希望得到解答。感谢。
推荐文章: