Почему я не могу получить свойство вложенного массива в IE9? - PullRequest
0 голосов
/ 17 января 2012

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

var $commentdata = $comment.data('comments'),       
    $position = $commentdata.playtime;  

В любом другом браузере все работает нормально. Однако в IE9 я получаю следующую ошибку: -

Ошибка: невозможно получить значение свойства playtime: объект имеет значение null или не определено

Есть идеи, почему это может быть и как я могу это исправить?

РЕДАКТИРОВАТЬ: Вот функция, которая добавляет данные в DOM:

  function getComments(oTable) {
    var $array = [];
    if (oTable.find('.dataTables_empty').length === 0) {
        //build array of songid's to send to server
        oTable.find('td').each(function () {
            "use strict";
            var $songdata = $(this).data('data'),
                $songid = $songdata.songid,
                $duration = $songdata.duration;
            $array.push($songid);
        });
        $.ajax({
            type: "GET",
            dataType: "json",
            async: false,
            url: "/wp-content/comment_data.php",
            data: 'songid=' + $array,
            success: function (data) {
                "use strict";
                $commentarray.length = 0;
                $commentarray.push(data);
                //apply template to each song and render comment icons
                console.log($commentarray);
                $.each(data, function (key, value) {
                    var $songdata = data[key];
                    if ($songdata !== null) {
                        var $songid = $songdata[0].songid,
                            songid = 'songid' + $songid,
                            $commentbar = $('#comment-bar-' + $songid),
                            sID = $commentbar.closest('td').find('a.playable').data('playable').sID,
                            song = soundManager.getSoundById(sID);
                        $commentbar.html($.render(data[key], 'commentBarTemplate'));
                        $.each($songdata, function (index, value) {
                            var commentdata = $songdata[index],
                                position = commentdata.position,
                                cid = commentdata.id,
                                $templateDiv = $('#timestamped-comment-template');
                            //$comment = $('#comment-' + cid).find('a');
                            //$comment.data('comments', commentdata);
                            song.onPosition(position * 1000, function () {
                                if ($('#example').find('td').hasClass('comments-shown') === false && $templateDiv.hasClass('hover') === false && $('body').attr('looping') === '') {
                                    showNewComment($comment);
                                }
                            });
                        });
                    }
                });
            }
        });
    }
    else {
        return false;
    }
}

Я довольно новичок в jQuery и до сих пор обдумываю его, поэтому извиняюсь, если этот код не слишком хорош. Но независимо от того, что все данные правильно помещаются в DOM, и я сказал, что это приемлемо для любого браузера, кроме IE.

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

Вот небольшая часть возвращаемого JSON:

{ "songid22" : null,
  "songid23" : [ { "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
        "body" : "test",
        "datasize" : "204",
        "display_name" : "admin",
        "id" : "5",
        "playtime" : 27.450980392200002,
        "position" : "56",
        "posttime" : "2011-09-28 15:32:41",
        "replies" : [ null ],
        "songid" : "23",
        "uid" : "1",
        "user_login" : "admin",
        "user_url" : "http://www.example.com/members/admin/"
      },
      { "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
        "body" : "test comment",
        "datasize" : "204",
        "display_name" : "admin",
        "id" : "6",
        "playtime" : 42.647058823499997,
        "position" : "87",
        "posttime" : "2011-09-28 16:38:37",
        "replies" : [ null ],
        "songid" : "23",
        "uid" : "1",
        "user_login" : "admin",
        "user_url" : "http://www.example.com/members/admin/"
      }
    ],
  "songid24" : [ { "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
        "body" : "comment at 0:48",
        "datasize" : "267",
        "display_name" : "admin",
        "id" : "2",
        "playtime" : 17.977528089900002,
        "position" : "48",
        "posttime" : "2011-09-28 14:38:41",
        "replies" : [ { "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
              "body" : "haha reply",
              "cid" : "2",
              "display_name" : "admin",
              "id" : "1",
              "posttime" : "2011-09-28 15:14:56",
              "uid" : "1",
              "user_login" : "admin",
              "user_url" : "http://www.example.com/members/admin/"
            },
            { "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
              "body" : "next replty",
              "cid" : "2",
              "display_name" : "admin",
              "id" : "2",
              "posttime" : "2011-09-28 15:15:07",
              "uid" : "1",
              "user_login" : "admin",
              "user_url" : "http://www.example.com/members/admin/"
            },
            { "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
              "body" : "first reply",
              "cid" : "2",
              "display_name" : "admin",
              "id" : "3",
              "posttime" : "2011-09-28 15:15:15",
              "uid" : "1",
              "user_login" : "admin",
              "user_url" : "http://www.example.com/members/admin/"
            }
          ],
        "songid" : "24",
        "uid" : "1",
        "user_login" : "admin",
        "user_url" : "http://www.example.com/members/admin/"
      },
      { "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
        "body" : "asdasd",
        "datasize" : "267",
        "display_name" : "admin",
        "id" : "3",
        "playtime" : 0.74906367041199995,
        "position" : "2",
        "posttime" : "2011-09-28 14:43:11",
        "replies" : [ { "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
              "body" : "test reply",
              "cid" : "3",
              "display_name" : "admin",
              "id" : "5",
              "posttime" : "2011-10-06 14:35:23",
              "uid" : "1",
              "user_login" : "admin",
              "user_url" : "http://www.example.com/members/admin/"
            },
            { "avatar" : "http://www.example.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
              "body" : "test reply",
              "cid" : "3",
              "display_name" : "admin",
              "id" : "6",
              "posttime" : "2011-10-07 14:48:21",
              "uid" : "1",
              "user_login" : "admin",
              "user_url" : "http://www.example.com/members/admin/"
            }
          ],
        "songid" : "24",
        "uid" : "1",
        "user_login" : "admin",
        "user_url" : "http://www.example.com/members/admin/"
      },
      { "avatar" : "http://www.songbanc.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
        "body" : "test",
        "datasize" : "267",
        "display_name" : "admin",
        "id" : "10",
        "playtime" : 36.329588014999999,
        "position" : "97",
        "posttime" : "2011-10-06 14:15:12",
        "replies" : [ null ],
        "songid" : "24",
        "uid" : "1",
        "user_login" : "admin",
        "user_url" : "http://www.songbanc.com/members/admin/"
      }
    ],

Мой поиск комментариев отлично работает для всех комментариев, которые имеют дополнительное гнездо «ответов». если replies = null, то IE генерирует ошибку.

РЕДАКТИРОВАТЬ 2: Из дальнейших исследований с использованием Firebug Lite в IE я вижу, что commentdata по-прежнему является объектом, каким он должен быть, но он совершенно пуст в комментариях ann, которые НЕ имеют вложенных «ответов» в своей структуре JSON. Поэтому кажется, что данные неправильно подключаются к dom и что ошибка должна быть в моем коде выше, а не в подключении массива в комментариях без ответов. Странно, что он отлично работает во всех других браузерах.

Есть еще идеи?

1 Ответ

1 голос
/ 18 января 2012

Проблема решена ... Хотите верьте, хотите нет, в моем шаблоне отсутствует закрывающий тег.

Шокирующее, что я пропустил это, хотя удивительно, что он отбросил бы IE 9 так же, как и он.

Мои извинения за трату времени людей.

Приветствия

...