我正在运行此代码,其中一旦文档准备就调用了脚本方法。此外,如果我放置一个调试器并警告其值,我可以得到该对象,但它会抛出一个错误说
在本地运行时"Uncaught TypeError: Cannot read property 'ecommerce' of undefined"
。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
var jsonObj = {
"input": {
"ecommerce":
{
"id": 123,
"name": "isEcommerce",
"type": "boolean",
"actionType" : "radioButton",
"child": {"yes":["p","q","e","w"],
"no":["a","b","c","d"]}
},
"bad website":
{
"id": 2324,
"name": "isBadWebsite",
"type": "boolean",
"actionType" : "radioButton",
"child": {"yes":["erw","sd","sd","sd"],
"no":["sd","sd","sd","fd"]}
}
}
};
var data = jsonObj;
$(document).ready(function(data){
alert("HI!!");
alert(data);
alert(data.input);
alert(data.input.ecommerce);
});
function tackleEvent(obj){
alert("Clicked " + obj);
}
</script>
</head>
<title>Hello!</title>
<body>
</body>
</html>
错误追踪:
Uncaught TypeError: Cannot read property 'ecommerce' of undefined ui:34
(anonymous function) ui:34
f.Callbacks.n jquery.min.js:2
f.Callbacks.o.fireWith jquery.min.js:2
e.extend.ready jquery.min.js:2
c.addEventListener.B jquery.min.js:2
为什么在输入对象时无法获取对象并且正在工作?
答案 0 :(得分:1)
如果您在前两个警告框中注意到,data
显示的值将为:
function(a,b) { return new e.fn.init(a,b,h) }
这是因为an alias of jQuery namespace已经在以下函数中传递(使用名为data
的本地副本):
function(data){
alert("HI!!");
alert(data);
alert(data.input);
alert(data.input.ecommerce);
}
并已被命名为数据。这样,在上面的功能里面;你可以使用:
data.ajax()
data.ready() //another
data.load()
// and all other jQuery functions.
访问全局变量data
;您需要使用:window.data
。
答案 1 :(得分:0)
您正在检查局部变量,而不是全局变量。
当您致电$(document).ready(function(data){
时,您可能假设该函数中的data
是全局变量data
。你实际在做的是创建一个局部变量,其中包含任何$(document).ready( ... )
个放置。据我所知,$(document).ready( ... )
调用的函数中的第一个变量将包含jQuery
。
您可以通过从该函数调用中删除data
来解决此问题。它现在使用全局变量。
$(document).ready( function(){
alert("HI!!");
alert(data);
alert(data.input);
alert(data.input.ecommerce);
});