IE上的对象值未定义

时间:2012-03-30 08:16:14

标签: javascript json internet-explorer

我在企业应用程序上有这个流程:

  1. 在每个服务页面上都有一个“搜索框”。当用户开始在其中键入内容时,调用Struts 2操作(通过JQuery自动完成器)
  2. on action call,Hibernate在MySql数据库上查找用户搜索的提示
  3. 找到提示时会给出JSON响应。类似的东西:

    ...
    "map": {
          "id": "1234",
          "title": "Title 1",
          "permalink": "title-1",
          "class": "contentClassA",
          "contentType": "Content type ..."
        },
    ...
    
  4. 回到前端JSP,一些Javascript创建了一个列表ov <div>,每个列表都包含map对象的数据。

  5. 步骤1-4正在使用Firefox版本11和Internet Explorer版本9.然后通过Javascript我尝试构建self.location重定向以重新加载区分class值的页面。这就是问题所在。如上所述,obj变量包含一个JSON map,我这样做:

        var classType; 
        if(obj['class'] != undefined) {
            classType = obj['class'];
        } else {
            //classType = obj.map.class;
            //classType = obj['map'].class;
            //classType = obj.class;
            // ...
            classType = obj.map['class'];
        }
    

    在FF上一切正常,但IE(版本7-8-9)属于 else ,无论我尝试什么,返回的classType变量都是未定义的。

    我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

我认为你的问题是propertyName "class",它是js中的保留关键字。请查看以下链接。

http://javascript.about.com/library/blreserved.htm

即使我遇到与IE类似的问题,我只需将密钥class重命名为className

答案 1 :(得分:0)

我想知道你对这个逻辑的目的是什么。但是,如果您想检查obj.map是否有class密钥,请使用hasOwnProperty

if (obj.map.hasOwnProperty('class')) {
    // do something with obj.map['class']
}

如果您不知道map中是否存在obj,您也可以检查:{/ p>

if ('map' in obj && obj.map.hasOwnProperty('class')) {
    //
}

有很多方法可以检查对象中是否存在属性,这取决于您对数据的控制程度以及需要考虑的情况。