当前位置: 首页 > 面试题库 >

在$ .ajax中的beforeSend设置+在$ .ajax中的beforeSend

左丘善
2023-03-14
问题内容

为了解决CSRF问题,我为Ajax使用了客户端设置:

$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        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;
        }
        if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
            // Only send the token to relative URLs i.e. locally.
            xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
        }
    }
});

直到今天,一切正常。但是现在我需要在发布之前做一些检查:

var check;
//...
$.ajax({
    //...
    beforeSend: function(xhr){
        if (check == 1){
            xhr.abort();
        }
    },
    success: function(data){
        //...
    }
});

CSRF验证失败。请求中止。据我了解,我只是取消了ajaxSetup对新功能的操作。如何将这两件事结合起来?


问题答案:

使用$(document).ajaxSend(function(ev, jqhr, settings) { ... })代替.ajaxSetup

如您所说,.ajaxSetup定义了默认处理程序,然后可以将其覆盖。使用,.ajaxSend您可以注册多个处理程序以在发送ajax请求之前触发。与自定义beforeSend处理程序配合正常。



 类似资料:
  • 问题内容: 我有这个jQuery ajax调用: 我想在条件返回的情况下停止调用,但返回不会停止调用。 我如何stop在Ajax上调用beforeSend? =======更新========= return false 也可以。 问题答案: $.ajax({ url : ‘my_action’, dataType: ‘script’, beforeSend : function(xhr, opt

  • 问题内容: 我正在使用对PHP的jQuery AJAX调用来验证登录表单。在php中,我创建一个会话,如果他们选中了“ remember me”复选框,我想创建一个cookie。这是php代码: 会话设置成功,但是cookie完全没有设置。我尝试设置所有值(域,路径等),但没有任何改变。有什么明显的我想念的吗? 问题答案: 以下是一些建议: 确保您指定了正确的日期到期格式 在重定向页面上设置coo

  • 问题内容: 我正在尝试为可重复查询添加延迟。 我发现.delay不是这里使用的那个。相反,我应该使用setInterval或setTimeout。我都尝试过,没有运气。 这是我的代码: 该代码工作正常,它按要求输出结果。它只是加载而没有延迟。timout和/或间隔似乎不起作用。 有人知道我在做什么错吗? 问题答案: 我从来不明白为什么人们总是间隔一定时间添加他们的AJAX请求,而不是让成功的AJA

  • 问题内容: 假设我有一个来自jQuery的Ajax调用,如下所示: 我希望能够使用添加到myData 结果应该是所有ajax调用(发布和获取)都被修改,所以如果我得到一个额外的参数IsAjax = true 问题答案: 这篇博客文章解释了如何使用添加数据。累积起来 就像这样:

  • 问题内容: 我已经用谷歌搜索了一段时间,只能找到能做什么。我找不到遇到相同问题的任何人。 我将JSON传递回服务器,并且不希望jQuery自动将数据转换为查询字符串,因此我将pr​​ocessData设置为false。如果我取出processData,则可以看到请求触发,但是一旦将其放入,就看不到正在发出任何请求(使用Firebug和Chrome开发工具)。 我最初发出的请求比这个要复杂一些,但是

  • 本文向大家介绍浅析巧用Ajax的beforeSend提高用户体验,包括了浅析巧用Ajax的beforeSend提高用户体验的使用技巧和注意事项,需要的朋友参考一下 jQuery是经常使用的一个开源js框架,其中的$.ajax请求中有一个beforeSend方法,用于在向服务器发送请求前执行一些动作。 防止重复数据 在实际项目开发中,提交表单时常常由于网络或者其原因,用户点击提交按钮误认为自己没有操