2010-05-08 5 views
4
jQuery.param({foo: 1});    // => "foo=1" - SUCCESS! 
jQuery.param({bar: new Date()}); // => "" - OUCH! 

Нет проблем с encodeURIComponent (новая дата()), что я бы подумал, что параметр вызывает для каждого члена.jQuery.param() - не сериализует объекты даты javascript?

Кроме того, явно использование «традиционного» параметра (например, jQuery.param (xxx, true)) Сериализует дату, но, увы, это не очень помогает, так как моя структура данных не является плоской.

Это потому, что typeof (Date) == "object" и param пытается спуститься в него, чтобы найти скалярные значения?

Как можно реалистично сериализовать объект, который имеет дату в нем для $ .post() и т. Д.?

+0

Какую версию JQuery вы используете? – James

+1

Это не то, что для меня происходит ...: \ 'jQuery.param ({bar: new Date()});' = 'bar = Sat + May + 08 + 2010 + 17% 3A17% 3A42 + GMT% 2B0100 + (GMT + Дневной свет + время) '. – Matt

+0

@Matt: Я использую 1.4.2. Вы случайно имеете традиционный = истинный как-то дефолт? Это единственный способ получить результат. Любые мысли о том, почему мы видим разные формы поведения? Мне нравится ваше лучше :-) – user336234

ответ

5

Возможно, вам захочется, чтобы дата была преобразована в строку, так как это все равно должно быть на проводе.

$.param({bar: new Date().toString()}); 

Теперь вы можете отформатировать его определенным образом, чтобы ваш сервер получил что-то, что он мог проанализировать. Я думаю, что datejs библиотека имеет поддержку для форматирования, или вы можете свернуть свой собственный, выбирая куски даты с getDate(), getMonth(), getYear() и т.д.

+0

Спасибо, но на самом деле меня больше беспокоит, что jQuery.param не сериализует ANYTHING для объектов Date, но encodeURIComponent знает, что Date() отлично. В этом случае формат не является действительно проблематичным, потому что мой (Rails) сервер может анализировать все разумные форматы даты, в том числе plain 'ol .toString(), как вы предлагаете. – user336234

1

Если вы работаете с продуктами Microsoft на стороне сервера, вы должны принять в что Microsoft сериализует Date как число миллисекунд с UTC, так как число. Точнее, строка сериализации выглядит так: /Date(utcDate)/, где utcDate дата - это номер. Поскольку JSON поддерживает обратную косую черту в качестве экранирующего символа вы должны использовать код как следующий сериализовать Date объект myDate:

"\/Date(" + Date.UTC(myDate.getUTCFullYear(), myDate.getUTCMonth(), 
         myDate.getUTCDate(), myDate.getUTCHours(), 
         myDate.getUTCMinutes(), myDate.getUTCSeconds(), 
         myDate.getUTCMilliseconds()) + ")\/" 
0

Я думаю, что это ошибка JQuery в следующем контексте:

  • JQuery 1.4. 2 (1.3.2 работы)
  • новые методы добавлены в Date.prototype
Смежные вопросы