В чем разница между этими двумя способами возврата объекта JSON? - PullRequest
2 голосов
/ 23 февраля 2010

Я играю с jQuery Week Calendar и пытаюсь заставить это работать, но я не могу понять, почему это выдает ошибку.

В календаре есть метод, который возвращает список событий, которые нужно заполнить.

Метод (который использует предустановленные события для демонстрационных целей) выглядит следующим образом:

function getEventData() {
      var year = new Date().getFullYear();
      var month = new Date().getMonth();
      var day = new Date().getDate();

      return {
         events : [
            {
               "id":1,
               "start": new Date(year, month, day, 12),
               "end": new Date(year, month, day, 13, 30),
               "title":"Lunch with Mike"
            },
            ...
            {
               "id":6,
               "start": new Date(year, month, day, 10),
               "end": new Date(year, month, day, 11),
               "title":"I am read-only",
               readOnly : true
            }
         ]
      };
   }

Я изменил его так, чтобы он использовал jQuery GET для другой страницы, которая возвращала бы список реальных дат. Для тестирования я сохранил те же тестовые данные, чтобы посмотреть, правильно ли выполнялась запись.

Метод вызовет страницу и вернет ее в свойстве responseText.

{ 
  events : [
        {
           'id':1,
           'start': new Date(2010, 2, 22, 12),
           'end': new Date(2010, 2, 22, 13, 30),
           'title':'Lunch with Mike'
        },
        ...
        {
           'id':6,
           'start': new Date(2010, 2, 28, 10),
           'end': new Date(2010, 2, 28, 11),
           'title':'I am read-only',
           readOnly : true
        }
     ] 
 }

Есть ли разница между двумя методами, которые я пропускаю? Два объекта для меня выглядят одинаково, за исключением того, что второй использует «вместо», поскольку он пишется через C # и не использует переменные year / month / day.

Проблема в том, что второй метод выдает ошибку, говорящую, что "G не определен", есть ли причина, по которой jQuery не понравился бы объект JSON, который я возвращаю?

РЕДАКТИРОВАТЬ: Я думаю, что я нашел источник ошибки. Внутри одного из методов есть оператор if, подобный этому:

 if (typeof options.data == 'string') {
        if (options.loading) options.loading(true);
        var jsonOptions = {};
        jsonOptions[options.startParam || 'start'] = Math.round(weekStartDate.getTime() / 1000);
        jsonOptions[options.endParam || 'end'] = Math.round(weekEndDate.getTime() / 1000);
        $.getJSON(options.data, jsonOptions, function(data) {
           self._renderEvents(data, $weekDayColumns);
           if (options.loading) options.loading(false);
        });
     }
     else if ($.isFunction(options.data)) {
        options.data(weekStartDate, weekEndDate,
              function(data) {
                 self._renderEvents(data, $weekDayColumns);
              });
     }

При простом выводе объекта JSON в getEventData () (первый способ) он попадает в оператор else, потому что он распознается как функция (я предполагаю), но когда я выполняю ajax GET, он считается строкой и вдаваясь в if.

Есть ли способ распознать это как функцию? Я попытался заключить возвращаемый результат в фигурные скобки, изменив dataType на script и используя eval () для приведения результата к функции, но ничего из этого, похоже, не сработало.

Ответы [ 3 ]

0 голосов
/ 23 февраля 2010

Поместите текст вашего ответа в JSON validator и посмотрите, в чем проблема.

Также обратите внимание, что вывод new Date(2010, 2, 28, 10) непосредственно в текст считается плохой практикой, лучше использовать реальные значения, а затем анализировать их на стороне клиента с помощью JS. (Я считаю, что это наиболее очевидная ошибка, если вы не используете eval для анализа строки JSON:))

начиная с jQuery 1.4.0, библиотека очень строгая в отношении того, как форматируется JSON (ваш текст json пропускает кавычки для ключей)

0 голосов
/ 23 февраля 2010

После поиска в Google я наткнулся на Календарь недели jQuery в группе Google и . В этом обсуждении возникла та же проблема, что и у меня.

Я думаю, что главной проблемой было неправильное форматирование DateTimes. Возвращая события, объект JSON напрямую преобразовал дату правильно, но мой ajax-вызов возвращал new Date(2010, 02, 23, 12) как раз. Это заставило его молча провалиться. Изменение даты и времени на что-то вроде 2010-02-23T12:15:00.000+10:00, кажется, исправило это.

Однако этот пользователь, похоже, не прав насчет events : [ нарушения JSON. Я оставил его в своем вызове ajax, и он все еще работает нормально.

0 голосов
/ 23 февраля 2010

Вы пробовали также заключать события в кавычки?

«события»: [....

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