#javascript #jquery #ajax #json #fullcalendar
#javascript #jquery #ajax #json #полный календарь
Вопрос:
Как следует из названия, он не отображает события ни в одной версии IE.
Использование IE с 7 по 10, и ни одна из версий не отображает событие. Jquery 1.11.0 и полный календарь 1.6.4.
Если я вручную добавляю события, это работает отлично, но с событиями, которые я извлекаю из моего вызова ajax, он вообще не будет отображать никаких событий, все другие браузеры отображают их без проблем.
Я получаю свои события из вызова ajax, которые затем анализирую в массив объектов JSON. Необработанные данные, полученные от моего вызова, выглядят следующим образом:
[
[
{
"start": "2014,05,01",
"title": "Event test 2",
"content": "Avec du texte pour en mettre plus",
"ID": 153
}
],
[
{
"start": "2014,04,16",
"title": "Event test",
"content": "<p>Du texte pour le premier événement.</p>",
"ID": 118
}
],
[
{
"start": "2014,04,10",
"title": "Event test",
"content": "<p>Du texte pour le premier événement.</p>",
"ID": 118
}
]
]
После этого я выполняю цикл в массиве 2-х измерений для извлечения каждого отдельного объекта и помещаю его в другой массив, код, который делает это:
for(var i = 0; i < jsonData.length; i ){
for(var k = 0; k < jsonData[i].length; k ){
dataEvents.push(jsonData[i][k]);
}
}
Теперь, если я просто жестко закодирую массив вышеупомянутых объектов JSON вручную в свойство events FullCalendar, это сработает, почему это не сработает, если это массив, созданный циклом?
IE не показывает ошибок, ни один файл не загружается (или загружается дважды). Я потратил несколько часов на изучение аналогичного вопроса (конечные запятые, по-видимому, являются наиболее распространенной ошибкой), но ничего, что конкретно помогло мне, кроме как изолировать проблему.
Спасибо, я надеюсь, что вы, ребята, сможете помочь мне и другим, которые могут столкнуться с той же проблемой, решить ее.
Редактировать: добавлены версии.
Комментарии:
1. Какая версия IE, jquery, fullcalendar?
2. Отредактировано для добавления версий. IE с 7 по 10, jQuery 1.11.0 и полный календарь 1.6.4.
Ответ №1:
Немного повозившись с этим, мне удалось заставить его работать. В итоге я изменил несколько вещей. Во-первых, изменил формат строки, чтобы использовать тире «-» вместо запятых, поэтому новый объект JSON выглядел следующим образом:
[
[
{
"start": "2014-05-01",
"title": "Event test 2",
"content": "Avec du texte pour en mettre plus",
"ID": 153
}
],
[
{
"start": "2014-04-16",
"title": "Event test",
"content": "<p>Du texte pour le premier événement.</p>",
"ID": 118
}
]
]
А затем изменил способ построения моих объектов, которые передавались в FullCalendar:
for(var i = 0; i < jsonData.length; i ){
for(var k = 0; k < jsonData[i].length; k ){
/* creating date object instead of string */
var d = new Date(jsonData[i][k]['start']);
/* adding one day, it was showing the previous day (due to localisation?) */
d.setDate( d.getDate() 1);
/* manually setting the object, and adding 'allDay':true , in my case I need them to be all day events */
dataEvents.push({
'start' : d,
'title' : jsonData[i][k]['title'],
'content' : jsonData[i][k]['content'],
'ID' : jsonData[i][k]['ID'],
'allDay' : true
});
}
}
После этого все работало нормально. Я думаю, IE не может интерпретировать строки на сегодняшний день так же, как это делают другие браузеры. Кстати, safari показывал те же результаты, что и IE, события не отображались, после этого изменения все отображается правильно во всех браузерах mayor.
Я опубликую ссылку на рабочую страницу, как только она будет запущена (в настоящее время она находится на наших частных серверах prod, но в ближайшее время ее следует перенести на действующие серверы).