我有两个laravel应用程序,一个用作管理面板,另一个用作API服务器。
我正在尝试对API执行jQuery AJAX Post请求,但响应的行为似乎很奇怪。
我正在使用barryvdh / laravel-cors在API上启用CORS。我也尝试禁用它并添加"选项"手动请求,但我仍然有同样的行为。
问题似乎与预检请求之后发出的请求有关。以下是发送方式的顺序(注意初始请求是POST):
预检请求(选项 - 工作正常)
对API端点的GET请求(不知道为什么会这样做)。它将302 Found重定向返回给referer(发送给客户端)
对API端点的POST请求。相同的302重定向回来。
对发送请求的管理网址的OPTIONS请求(由于管理员应用程序上没有CORS而失败)。
这是一张包含请求流程的图片: Request Flow (Chrome network panel)
我必须提到我没有在控制器中进行任何重定向,也没有添加任何可以执行此操作的中间件。
答案 0 :(得分:2)
所以很明显,在这种情况下,没有一种方法可以确定请求是否必须作为JSON回答,特别是$ request-> ajax()和$ request-> wantsJSON();
我通过在我的基本ApiController上覆盖函数buildFailedValidationResponse来解决问题,方法是让它始终返回JSON响应。
protected function buildFailedValidationResponse(Request $request, array $errors)
{
return new JsonResponse($errors, 422);
}