发送CSRF保护之前的JQuery AJAX 我有一个显示JSON响应的AJAX进程。如果禁用CSRF保护,该过程将正常工作。我得到了HTTP 200和JSON响应。
工作形式如下:发送CSRF保护之前的JQuery AJAX 我有一个显示JSON响应的AJAX进程。如果禁用CSRF保护,该过程将正常工作。我得到了HTTP 200和JSON响应。,jquery,ajax,flask,wtforms,flask-wtforms,Jquery,Ajax,Flask,Wtforms,Flask Wtforms,工作形式如下: $(document).ready(function() { //AJAX $('form').on('submit', function(event) { $.ajax({ data : { user : $('#user').val(), password : $('#password').val() },
$(document).ready(function() {
//AJAX
$('form').on('submit', function(event) {
$.ajax({
data : {
user : $('#user').val(),
password : $('#password').val()
},
url: '/loginproc',
type: 'POST'
})
.done(function(data) {
if (data.error) {
$('#errorAlert').text(data.error).show();
$('#successAlert').hide();
}
else {
$('#successAlert').text(data.xx).show();
$('#errorAlert').hide();
}
});
event.preventDefault();
});
});
这在语法上正确吗?是否需要在“.done”之前添加分号
我使用的是CSRF保护,文件说明如下: 发送AJAX请求时,向其添加X-CSRFToken头。对于 例如,在JQuery中,您可以配置所有发送令牌的请求 这一点正确吗?我确实得到了HTTP 200,但没有返回JSON数据。JQuery/AJAX让我很困惑 问题:
2.s我建议您移动事件。preventDefault();在事件提交之后,还可以使用console.log检查变量是否包含您的想法,控制台在您的浏览器中,只需在浏览器中搜索如何打开控制台,以便您可以检查包含csrf_标记的内容以及“done”和add.fail响应中的长度和数据。失败后,您可以处理带有错误的服务器响应 关于“我是否需要在“.done”之前添加分号”的问题,答案是否定的,因为这称为方法链接示例:$(“#id”).show().css(“背景”,“红色”);在示例im链接show和css中,您可以一次链接这么多方法;)
$(文档).ready(函数(){
$('form')。在('submit',函数(事件){
event.preventDefault();
var csrf_token=“{{csrf_token()}}”;
日志(“csrf_令牌:”,csrf_令牌);
$.ajaxSetup({
发送前:功能(xhr、设置){
if(!/^(获取| HEAD | OPTIONS | TRACE)$/i.test(settings.type)){
setRequestHeader(“X-CSRFToken”,CSRFToken)
}
}
});
$.ajax({
数据:{
用户:$('#user').val(),
密码:$('#password').val()
},
url:“/loginproc”,
类型:“POST”
})
.完成(功能(数据){
console.log(“完成”,data.length,data);
if(data.error){
$('#errorAlert').text(data.error).show();
$('successAlert').hide();
}
否则{
$('#successAlert').text(data.xx).show();
$('#errorAlert').hide();
}
})
.fail(函数(jqXHR、textStatus、errorshown){
console.error(“带有错误的响应:”,jqXHR,textStatus,errorshown);
});
});
});你好,马丁,非常感谢你的回复。我非常感激。我试过剧本,做了一些修改,但是我无法让它发挥作用。我没有要求您以任何方式更新脚本,只是注意到我的解决方案在我的场景中不起作用。可能是用户的问题,我没有在JQuery上投入太多时间。在这个AJAX调用中发生了这么多事情,我已经断断续续地讨论了好几年了。。。好几个星期。压碎再次感谢!!!!但是您是否使用我编写的脚本检查了控制台?它报告“ReferenceError:csrftoken未定义”您在哪里留下了下划线:V?xhr.setRequestHeader(“X-csrftoken,csrftoken)//必须是您定义的csrf_令牌;)您可以在htaccess文件中启用csrf保护。尝试使用success函数而不是done
<script type="text/javascript">
var csrf_token = "{{ csrf_token() }}";
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrf_token);
}
}
});
</script>
$(document).ready(function() {
$('form').on('submit', function(event) {
var csrf_token = "{{ csrf_token() }}";
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type)) {
xhr.setRequestHeader("X-CSRFToken", csrftoken)
}
}
});
$.ajax({
data : {
user : $('#user').val(),
password : $('#password').val()
},
url: '/loginproc',
type: 'POST'
})
.done(function(data) {
if (data.error) {
$('#errorAlert').text(data.error).show();
$('#successAlert').hide();
}
else {
$('#successAlert').text(data.xx).show();
$('#errorAlert').hide();
}
});
event.preventDefault();
});
});