Значения объекта не определены в IE - PullRequest
1 голос
/ 30 марта 2012

У меня есть этот поток для корпоративного приложения:

  1. на каждой странице сервиса есть «окно поиска». Когда пользователь начинает что-то набирать, вызов действия Struts 2 в fired (через автозаполнение JQuery)
  2. при вызове действия, Hibernate ищет подсказки при поиске пользователя в базе данных MySql
  3. когда подсказки найдены, дается ответ JSON. Что-то вроде:

    ...
    "map": {
          "id": "1234",
          "title": "Title 1",
          "permalink": "title-1",
          "class": "contentClassA",
          "contentType": "Content type ..."
        },
    ...
    
  4. Вернувшись во внешний интерфейс JSP, некоторые Javascript создают список <div>, каждый из которых связывается с данными объекта map.

Шаги 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 ]

1 голос
/ 30 марта 2012

Я думаю, что ваша проблема связана с propertyName "class", которое является зарезервированным ключевым словом в js.Проверьте ссылку ниже.

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

Даже когда я сталкивался с подобной проблемой с IE, я просто переименовал ключ class в className

0 голосов
/ 30 марта 2012

Интересно, какая у вас цель с этой логикой?Но если вы хотите проверить, имеет ли obj.map ключ class, используйте hasOwnProperty:

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

Если вы не знаете, присутствует ли map в obj, вы можетепроверьте это тоже:

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

Существует множество способов проверить, существуют ли свойства объекта, все в зависимости от того, насколько вы контролируете данные и в каких случаях вам нужно учитывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...