未捕获的类型错误:无法读取未定义的属性 toLowerCase
Posted
技术标签:
【中文标题】未捕获的类型错误:无法读取未定义的属性 toLowerCase【英文标题】:Uncaught TypeError: Cannot read property toLowerCase of undefined 【发布时间】:2016-03-25 10:41:54 【问题描述】:如何使用 jQuery 和 Spring Security 在所有 Ajax 请求中包含令牌?
目前我收到以下错误
未捕获的类型错误:无法读取未定义的属性“toLowerCase”
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”