Разбор автоматически сгенерированного объекта даты .NET с Javascript / JQuery - PullRequest
4 голосов
/ 14 апреля 2011

Есть несколько сообщений на эту тему, но нет ответа на этот конкретный вопрос.

Сервер возвращает это: "/Date(1304146800000)/"

Я бы вообще не хотел изменять код на стороне сервера, а вместо этого проанализировал дату, включенную в сгенерированный .Net объект JSON. Это не кажется таким уж сложным, потому что похоже, что оно почти там. Тем не менее, кажется, что нет быстрого решения, по крайней мере, на этих форумах.

Из предыдущих постов кажется, что это можно сделать с помощью REGEX, но REGEX и я - старые враги, которые холодно смотрят друг на друга через планку.

Это единственный способ? Если да, может кто-нибудь указать мне ссылку на REGEX, которая подходит для этой задачи?

С уважением,

Guido

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Ссылка от Роберта хорошая, но мы должны постараться ответить здесь, а не просто публиковать ссылки.

Вот быстрая функция, которая делает то, что вам нужно.http://jsfiddle.net/Aaa6r/

function deserializeDotNetDate(dateStr) {
  var matches = /\/Date\((\d*)\)\//.exec(dateStr);

  if(!matches) {
    return null;
  }

  return new Date( parseInt( matches[1] ) );
}

deserializeDotNetDate("/Date(1304146800000)/");
1 голос
/ 14 апреля 2011

Так как вы используете jQuery, я расширил его $.parseJSON() функциональность, поэтому он может сделать это преобразование для вас автоматически и прозрачно .

Он не только конвертирует.чистые даты, но даты ISO также.Даты ISO поддерживаются встроенными конвертерами JSON во всех основных браузерах, но они работают только в одном направлении, поскольку спецификация JSON не поддерживает тип данных даты.

Прочитать все подробности (не нужно копировать содержимое сообщения блога здесьпотому что это будет слишком много) в моем блоге и получите код.Идея остается прежней: изменить поведение jQuery по умолчанию $.parseJSON(), чтобы он мог определять даты .Net и ISO и автоматически преобразовывать их при анализе данных JSON.Таким образом, вам не нужно просматривать проанализированные объекты и конвертировать даты вручную.

Как это используется?

$.parseJSON(yourJSONstring, true);

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

Почему это решение лучше, чем ручное преобразование? (, предложенный Хуаном )

  1. Поскольку вы снижаете риск человеческого фактора забыть преобразовать некоторую переменную в вашем дереве объектов (объекты могут быть глубокими и(широкий)конверсии на стороне клиента.Если вы делаете это автоматически, вам не нужно думать (или делать что-либо) об этом.

Две главные причины из головы.

При переопределении функциональности jQuery чувствуетнеправильно

Если вы не хотите переопределять существующие функции $.parseJSON(), вы можете минимально изменить код и переименовать расширение в $.parseJSONwithdates(), а затем всегда использовать свою собственную функцию при разборе JSON.Но у вас может быть проблема, когда вы устанавливаете Ajax-вызовы на dataType: "json", который автоматически вызывает исходный анализатор.Если вы используете этот параметр, вам придется переопределить существующую функциональность jQuery.

Хорошо также то, что вы не меняете исходный файл кода библиотеки jQuery.Вы помещаете это расширение в отдельный файл и используете его по собственному желанию.Некоторые страницы могут использовать его, а другие нет.Но разумно использовать его везде, иначе у вас будет та же проблема человеческого фактора, если вы забудете включить расширение.Просто включите ваше расширение в какой-нибудь глобальный файл Javascript (или главную страницу / шаблон), который вы можете использовать.

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