Laravel 5.6+Vue.js中axios.post()无响应问题求助
结合你给出的代码和场景,我整理了几个最可能导致这个问题的原因,你可以逐一排查:
错误捕获的拼写错误:你代码里的
catch块写的是console.log(error.mesage),这里的mesage是拼写错误,正确应该是error.message!这会导致即使请求有错误返回,你也看不到错误信息,误以为没有响应。先把这个拼写改过来,再看控制台有没有输出具体错误。CSRF令牌未正确携带:虽然你加了meta标签,但单独引入的axios实例可能没正确获取到令牌。你可以在
created钩子手动设置CSRF令牌,替换掉现有X-Requested-With的设置(或者同时加上):created: function(){ axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; // 手动添加CSRF令牌 axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').content; }然后在浏览器开发者工具的Network面板里查看登录请求的Request Headers,确认是否包含
X-CSRF-TOKEN字段。Laravel路由匹配问题:确认你的
/login路由是在routes/web.php中定义的POST路由,而不是api.php(api路由默认关闭CSRF验证,但登录逻辑应该放在web路由下)。检查路由定义是否类似:Route::post('/login', 'Auth\LoginController@login');如果路由不匹配,服务器会返回404,但因为你之前的错误捕获拼写错误,看不到这个信息。
登录控制器未返回JSON响应:Laravel默认的Auth登录控制器在登录成功时会返回页面重定向,但AJAX请求需要JSON响应。你可以重写
LoginController的login方法,确保当请求是AJAX时返回JSON:public function login(Request $request) { $this->validateLogin($request); if ($this->attemptLogin($request)) { // 针对AJAX请求返回JSON if ($request->wantsJson()) { return response()->json(['status' => 'success', 'user' => auth()->user()]); } return $this->sendLoginResponse($request); } // 登录失败的AJAX响应 if ($request->wantsJson()) { return response()->json(['error' => 'Invalid credentials'], 422); } return $this->sendFailedLoginResponse($request); }如果服务器返回的是页面重定向,axios会自动跟随重定向,但前端无法解析页面内容,导致看起来没有响应。
请求被浏览器插件拦截:有些广告拦截器、隐私插件可能会拦截登录类的AJAX请求。你可以尝试在浏览器隐身模式下测试,或者暂时禁用所有插件,看是否能正常获取响应。
内容的提问来源于stack exchange,提问作者Dominykas Satkus

