ajax post 419,解决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

16function 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

12function 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

5django.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

关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。

版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本。

声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值