2011-03-28 3 views
0

je veux stocker le formulaire sur client, dans json dans cookie, après que désérialiser le formulaire. ce que je fais:sérialiser formulaire à json et stocker dans le cookie

sérialisation JSON:

function formToJSON(selector) { 
    var form = {}; 
    $(selector).find(':input[name]:enabled').each(function() { 
     var self = $(this); 
     var name = self.attr('name'); 

     if (name.indexOf('TextBox', 0) == 0) { 
      if (form[name]) { 
       form[name] = form[name] + ',' + self.val(); 
      } 
      else { 
       form[name] = self.val(); 
      } 
     } 
    }); 

    return form; 
} 

alors sur la forme change, je suis en train d'enregistrer sous forme de cookie:

$('#form1 :input').change(function() { 

    var eba = formToJSON($('#form1')); 

    $.cookie.set('fo', eba, {json:true}); 
    var a = $.cookie.get('fo',true); 
    alert(a); 


    //$.cookie.set('form123', { "ksf": "saf", "tt": "" }, { json: true }); 
    //var b = $.cookie.get('form123', true); 
    //alert(JSON.stringify(b)); 
}); 

Débogueur - eba est JSON objet, mais alert (a) donne null. le code commenté fonctionne, ce json sérialisé, et je le gettin à partir de cookies. mais pourquoi le code ne fonctionne pas pour la forme ??? plug-in cookie pris de jquery.com

+0

Deux problèmes que je vois immédiatement: le premier sélecteur ne devrait pas avoir ':' au début, et vous pouvez également ignorer le bit '[nom]'. Deuxièmement, quand vous appelez 'formToJSON' vous n'avez besoin de passer qu'une chaîne, bien que cette dernière ne va pas causer de problème (c'est juste inefficace). – sje397

Répondre

2

Utilisez cette bibliothèque pour stringify/parse JSON http://json.org/js.html

rappelez-vous qu'il ya une limite de taille de 4Ko env sur les cookies, http://support.microsoft.com/kb/306070

+1

ne comprends pas ce que j'ai besoin de l'utiliser. –

+0

Désolé, j'utiliserais toujours cette bibliothèque pour sérialiser et désérialiser les objets JSON et JavaScript. C'est plus rapide et plus robuste que tout ce que je pourrais écrire dans un laps de temps raisonnable. Au moins de cette façon, je sais que je n'ai qu'à m'inquiéter du stockage. J'ai utilisé ceci avec le HTML5 localStorage sans problèmes. Vous devez toujours retirer l'élément du formulaire et le placer dans un objet pour le stocker. Les cookies ne stockent vraiment que les chaînes, avez-vous franchi le code de connexion des cookies pour voir ce qui est stocké? –

-2

les cookies du navigateur AFAIK ne peuvent pas être lus à l'aide javascript (sauf pour votre propre domaine), pour empêcher Cross Site Reeuqest Forgery Mais vous pouvez toujours les définir.

+0

lol, je demande mes propres cookies –

+0

faux, vous pouvez lire les cookies, mais seulement à partir du même domaine – wildcard

+0

@ wildcard: mon mauvais, j'ai oublié de mentionner le fait :). –