发送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让我很困惑

问题:
  • 表格1(无CSRF的工作表格)的语法正确吗
  • 我不应该使用“ajaxSetup”吗
  • 你知道我为什么没有取回JSON数据吗?我是否也需要将退货包装在CSRF中
  • 非常感谢您的帮助,谢谢您抽出时间

    语法正确且功能正常
    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);
    });             
    });
    
    });<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();
        });
    
    });