解决laravel 出现ajax请求419(unknown status)的问题 - 小众知识

解决laravel 出现ajax请求419(unknown status)的问题

2013年01月27日 14:18:05 苏内容
  标签: laravel//ajax
阅读:156

这个是因为laravel自带CSRF验证的问题

解决方法

方法一:去关掉laravel的csrf验证,但这个人不建议,方法也不写出来了。

方法二:把该接口写到api.php上就好了

方法三:

首先在页面加上

1
<meta name="csrf-token" content="{{ csrf_token() }}" />

然后请求的在header里面加上

1
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')

就ok了

方法四:页面上加上代码{{csrf_field()}},如果是form表单提交的话直接加上就ok了,不是form的话ajax请求的时候写到请求参数里增加参数_token并获取{{csrf_field()}}的值,然后请求就好了


var name=$('#name').val();
 $.ajax({
 type:'POST',
 url:"{{route('rule.add')}}",
 dataType:'json',
 data:{
 'name':name,
 '_token':'{{csrf_token()}}'
 },
 success:function(data,sta){
 if(data.code==200){
  layer.alert('添加成功',function(){
 
  });
 }else{
  layer.alert('添加失败',function(){
 
  });
 }
 },
 error:function(data){
 console.log(data)
 }
});

以上这篇解决laravel 出现ajax请求419(unknown status)的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。


通过获取隐藏的input标签中的csrfmiddlewaretoken值,放置在data中发送。

1
2
3
4
5
6
7
8
9
10
11
12
13
$.ajax({
    url: "/cookie_ajax/",
    type: "POST",
    data: {
        "username": "yang",
        "password": 123,
        // 使用jQuery取出csrfmiddlewaretoken的值,拼接到data总
        "csrfmiddlewaretoken": $("[name="csrfmiddlewaretoken"]").val()
    },
    success: function(data){
        console.log(data);
    }
})

0|12. 方式二


通过获取返回的cookie中的字符串,放置在请求头中发送。

注意: 需要引入一个jquery.cookie.js插件。

1
2
3
4
5
6
7
8
9
10
11
12
13
$.ajax({
    url: "/cookie_ajax/",
    type: "POST",
    // 从Cookie取csrftoken, 并设置到请求头中
    headers: {"X-CSRFToken": $.cookie("csrftoken")},
    data: {
        "username": "yang",
        "password": 123
    },
    success: function(data){
        console.log(data)
    }
})

或者用自己写一个getCookie方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function getCookie(name){
    var cookieValue = null;
    if (document.cookie && document.cookie !== ""){
        var cookies = document.cookie.split(";");
        for (var i = 0; i < cookies.length; i++){
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) === (name + "=")){
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie("csrftoken");

每一次都这么写太麻烦了,可以使用$.ajaxSetup()方法为ajax请求统一设置。

1
2
3
4
5
6
7
8
9
10
11
12
function csrfSafeMethod(method){
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method);
}
 
$.ajaxSetup({
    beforeSend: function(xhr, settings){
        if (!csrfSafeMethod(settings.type) && !this.crossDomain){
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
})

注意:
如果使用从cookie中取csrftoken的方式,需要确保cookie存在csrftoken值。

如果你的视图渲染的HTML文件中没有包含{% csrf_token %}, Django可能不会设置CSRFtoken的cookie。

这个时候需要使用ensure_csrf_cookie()装饰器强制设置Cookie。

1
2
3
4
5
django.views.decorators.csrf import ensure_csrf_cookie
 
@ensure_csrf_cookie
def login(request):
    pass

 


__EOF__

作  者:BNDong
出  处:https://www.cnblogs.com/yang-wei/p/10009106.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!

分类: Ajax
0
0
« 上一篇: js和jQuery实现的Ajax
» 下一篇: Ajax上传文件
posted @ 2018-11-23 18:13  _杨魏  阅读(5408)  评论(0)  编辑  收藏


扩展阅读