“Uncaught TypeError:无法读取未定义的属性'电子商务'的可能原因”

时间:2013-10-05 08:42:44

标签: javascript jquery

我正在运行此代码,其中一旦文档准备就调用了脚本方法。此外,如果我放置一个调试器并警告其值,我可以得到该对象,但它会抛出一个错误说 在本地运行时"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

为什么在输入对象时无法获取对象并且正在工作?

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);
});