jQuery.param() - 不序列化javascript Date对象?

时间:2010-05-08 15:34:38

标签: javascript jquery

jQuery.param({foo: 1});             // => "foo=1" - SUCCESS!
jQuery.param({bar: new Date()});    // => "" - OUCH!

encodeURIComponent(new Date())没有问题,这是我认为param为每个成员调用的。

另外,明确使用“传统”参数(例如jQuery.param(xxx,true))是否序列化了日期,但是,由于我的数据结构并不平坦,所以没有多大帮助。

这是因为typeof(Date)==“object”而param试图进入它以查找标量值吗?

对于$ .post()等,如何真实地序列化碰巧有Date的对象?

3 个答案:

答案 0 :(得分:5)

您可能希望将日期转换为字符串,因为无论如何它都必须在电线上。

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

现在您可能希望以某种特定方式对其进行格式化,以便您的服务器获得可以解析的内容。我认为datejs库支持格式化,或者您可以通过使用getDate()getMonth()getYear()等选择日期部分来推广自己。

答案 1 :(得分:1)

如果您在服务器端使用Microsoft产品,则应考虑到Microsoft将日期序列化为UTC以来的毫秒数,以及数字。更确切地说,序列化字符串看起来像/Date(utcDate)/,其中utcDate date是此数字。因为JSON支持将反斜杠作为转义字符,所以您应该使用以下代码来序列化Date对象myDate

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

答案 2 :(得分:0)

我认为这是以下上下文中的jQuery错误:

  • jQuery 1.4.2(1.3.2作品)
  • 将新方法添加到Date.prototype