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

Il n'y a pas de problème avec encodeURIComponent (new Date()), ce que j'aurais cru que param appelle pour chaque membre. De plus, en utilisant explicitement le paramètre "traditional" (par exemple jQuery.param (xxx, true)), sérialiser la date, mais hélas, cela n'aide pas beaucoup puisque ma structure de données n'est pas plate. Est-ce parce que typeof (Date) == "object" et param essaie d'y descendre pour trouver des valeurs scalaires?jQuery.param() - ne sérialise pas les objets javascript Date?

Comment peut-on sérieusement sérialiser un objet qui contient des dates pour $ .post() etc.?

+0

Quelle version de jQuery utilisez-vous? – James

+1

Ce n'est pas ce qui se passe pour moi ...: \ 'jQuery.param ({bar: new Date()});' = 'bar = sam + mai + 08 + 2010 + 17% 3A17% 3A42 + GMT% 2B0100 + (GMT + Lumière du jour + Heure). – Matt

+0

@Matt: J'utilise 1.4.2. Avez-vous par hasard traditionnel = vrai en quelque sorte par défaut? C'est la seule façon d'obtenir votre résultat. Des pensées sur pourquoi nous voyons des comportements différents? J'aime mieux le tien :-) – user336234

Répondre

5

Vous allez probablement vouloir que la date soit transformée en chaîne, puisque c'est ce que ça va devoir être sur le fil quand même. Maintenant vous voudrez peut-être le mettre en forme d'une manière particulière de sorte que votre serveur obtienne quelque chose qu'il peut analyser. Je pense que la bibliothèque datejs a un support pour la mise en forme, ou vous pouvez rouler votre propre en ramassant des morceaux de la date avec getDate(), getMonth(), getYear() etc.

+0

Merci, mais en fait je suis plus inquiet que jQuery.param ne sérialise AUCUN objet pour les objets Date, mais encodeURIComponent sait que Date() est très bien. Dans ce cas, le format n'est pas vraiment problématique car mon serveur (Rails) peut analyser tous les formats de date raisonnables, y compris le 'ol .toString() comme vous le suggérez. – user336234

1

Si vous travaillez avec des produits Microsoft sur le côté du serveur, vous devriez prendre en considération, que Microsoft sérialiser date comme un nombre de millisecondes depuis UTC, donc un nombre. Pour être plus précis, la chaîne de sérialisation ressemble à /Date(utcDate)/, où utcDate date est ce numéro. Parce que JSON soutient la barre oblique inverse comme caractère d'échappement, vous devez utiliser le code suivant pour sérialiser un objet DatemyDate:

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

Je pense que c'est un bug jQuery dans le contexte suivant:

  • jQuery 1.4. 2 (1.3.2) œuvres
  • nouvelles méthodes ajoutées dans Date.prototype
Questions connexes