未捕获的类型错误:无法读取未定义的属性 toLowerCase

Posted

技术标签:

【中文标题】未捕获的类型错误:无法读取未定义的属性 toLowerCase【英文标题】:Uncaught TypeError: Cannot read property toLowerCase of undefined 【发布时间】:2016-03-25 10:41:54 【问题描述】:

如何使用 jQuery 和 Spring Security 在所有 Ajax 请求中包含令牌?

目前我收到以下错误

未捕获的类型错误:无法读取未定义的属性“toLowerCase”

javascript

function editUser(data) 

var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
var ctx = location.href.substring(0, location.href.lastIndexOf("/"));
var dataObject = JSON.stringify( 'username': data );

$.ajax(
      url: ctx+'/users/edit',
      type: 'POST',
      beforeSend: function(xhr)
          xhr.setRequestHeader(header, token);
      ,
      data: data
    );
   

控制器:

@RequestMapping(value = "/users/edit", method = RequestMethod.POST)
public String editUser(@RequestParam("username") String username) 

    System.out.println(username);
    return "users/edit";

toLowerCase 函数在 jQuery 中

// Caches the header
                setRequestHeader: function( name, value ) 
                    var lname = name.toLowerCase();
                    if ( !state ) 
                        name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
                        requestHeaders[ name ] = value;
                    
                    return this;
                ,

【问题讨论】:

我在您发布的任何代码中都没有看到任何toLowerCase 的使用。错误发生在其他地方。 @Barmar 请看我的编辑 错误提示header未定义。 我在我的页面顶部添加了这些,这已经解决了问题<meta name="_csrf" content="$_csrf.token"/><meta name="_csrf_header" content="$_csrf.headerName"/> 自然而然。您的代码将这些元标记的内容复制到 AJAX 标头中。没有标签当然不行。 【参考方案1】:

要么确保页面始终具有<meta name="_csrf" content="something"><meta name="_csrf_header" content="something"> 标签,要么在尝试设置标题之前让您的 AJAX 代码检查这些值是否存在:

beforeSend: function(xhr) 
    if (header && token) 
        xhr.setRequestHeader(header, token);
    

【讨论】:

以上是关于未捕获的类型错误:无法读取未定义的属性 toLowerCase的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:无法读取未定义的属性 toLowerCase

JQuery:未捕获的类型错误:无法读取未定义的属性“调用”

NextJS:未捕获的类型错误:无法读取未定义的属性(读取“属性”)

未捕获的类型错误:无法读取文本字段上未定义错误的属性“toLowerCase”

为啥我会收到“未捕获的类型错误:无法读取未定义的属性 'body'”?

反应和流星“未捕获的类型错误:无法读取未定义的属性'createElement'”