Я обращаюсь к массиву, хранящемуся как объект, через метод .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 и что ошибка должна быть в моем коде выше, а не в подключении массива в комментариях без ответов. Странно, что он отлично работает во всех других браузерах.
Есть еще идеи?