Laravel 5.6中AJAX POST请求出现419未知状态错误如何解决?
解决Laravel AJAX POST请求的419未知状态错误
哥们,你碰到的419错误是Laravel的CSRF令牌验证失败导致的——这是Laravel用来防跨站请求伪造的安全机制,没通过验证就会返回这个状态码。结合你的代码,我整理了几个必须检查和修复的点:
1. 先确认页面有CSRF元标签
你的JS代码里想通过$('meta[name="_token"]').attr('content')拿CSRF令牌,但如果页面的<head>里没加这个元标签,那肯定拿不到值,直接触发验证失败。
赶紧在页面头部加上这个标签:
<meta name="_token" content="{{ csrf_token() }}">
2. 修复JS里的小语法错误
你定义url变量的语句末尾没加分号,虽然有些浏览器能容错,但保不齐会影响后续代码执行,补上就好:
var url = "/instructor-notes-save/{{$application->id}}"; // 加上末尾的分号
3. 确保CSRF令牌正确传到请求里
虽然你用了$.ajaxSetup设置请求头,但有时候可能因为各种原因(比如jQuery版本、页面环境)导致请求头没生效,稳妥点的话可以直接在AJAX的data里带上令牌:
$.ajax({ url: url, method: 'post', data: { _token: $('meta[name="_token"]').attr('content'), // 直接把令牌放进请求数据里 application_notes: jQuery('#application_notes').val(), }, success: function(response){ console.log(response); } });
4. 可选:如果是表单内的场景,用Laravel的@csrf指令更省心
要是你的按钮和文本域是放在<form>标签里的,直接用Laravel的@csrf指令生成一个隐藏的令牌输入框就行:
<form> @csrf <!-- 你的按钮、文本域这些元素 --> </form>
然后JS里就能这样获取令牌:
_token: $('input[name="_token"]').val()
把这些地方都搞定后,你的AJAX POST请求应该就能顺利通过CSRF验证,不会再返回419错误了。
内容的提问来源于stack exchange,提问作者maximus1127
相关产品推荐
相关产品推荐

