1

EDIT: il y a une erreur conceptuelle et une erreur technique sur la définition du problème. Il est donc préférable de fermer cette question au lieu de l'aseptiser. Quand j'ai le temps de redéfinir le problème, je le posterai à nouveau. S'il vous plaît aider à voter pour fermer en raison de non spécifique.Comment désérialiser un objet JavaScript multiniveau dans un formulaire HTML?

Il y a beaucoup d'informations et de questions sur la sérialisation de formulaires HTML complexes à l'objet JavaScript correspondant (par exemple this).

Voici un échantillon de ce processus: ayant cette forme

<form> 
    <input type="text" name="scalar" value="1"> 
    <input type="text" name="array[0]" value="1"> 
    <input type="text" name="array[1]" value="2"> 
    <input type="text" name="array[2]" value="3"> 
    <input type="text" name="object[subscalar]" value="1"> 
</form> 

Et obtenir de lui cet objet javascript

{ 
    "scalar": 1, 
    "array": [1, 2, 3], 
    "object": { 
    "subscalar": 1 
    } 
} 

Mais comment puis-je faire le travail inverse?

Notre but est d'effectuer un POST natif en ciblant une fenêtre de navigateur distincte. Nous avons un objet JavaScript complexe et nous envoyions via un POSTE AJAX, donc nous utilisions l'objet directement comme paramètre de données jQuery.ajax. Mais maintenant nous devons créer une forme réelle dans le DOM contenant les entrées et les valeurs avec toute la syntaxe entre parenthèses, et ensuite soumettre nativement le ciblant un cadre spécifique.

L'utilisation de jQuery est facultative. La méthode existante, la bibliothèque, etc. est préférable à un snuppet personnalisé. Il ne s'agit pas de ne pas pouvoir le coder, mais de ne pas être certain de réinventer la roue.

Merci d'avance.

+0

Alors avez-vous une forme à partir de laquelle vous allez chercher valeurs? – Rajesh

+0

Votre structure n'a pas de sens. Pourquoi avez-vous besoin d'un nom comme "dream [as] ..." généré dynamiquement ?? –

+0

@Rajesh non, j'ai un objet JS et j'ai besoin de générer un formulaire que le navigateur peut envoyer produisant le même POST qu'il produit lorsque j'envoie cet objet via XMLHTTPRequest. –

Répondre

1
function parseform(elem,parent=""){ 
    this.html=""; 
    this.parent=parent; 
    if(typeof elem=="Array"){ 
     var counter=0; 
     elem.forEach(function(a){ 
      this.html+=new parseform(a,this.parent+"["+counter+"]").html; 
      counter++; 
     }); 
    } 
    if(typeof elem=="String"){ 
     this.html+="<input name='"this.parent+"["+elem+"]' />"; 
    } 
    //object in progress 
    if(typeof elem=="Object"){ 
     for (var key in elem) { 
      if (p.hasOwnProperty(key)) { 
       this.html += new parseform(elem[key],this.parent="["+key+"]").html; 
      } 
     } 
    } 
} 

Utilisez comme ceci:

code=new parseform(yourjsondecoded).html; 

Je sais que vous ne voulez pas de code, mais je ne pense pas que theres un api pour quelque chose de si spécifique

+0

Désolé les gars, il y a une erreur conceptuelle et une erreur technique sur la définition du problème, donc je suis en train de fermer ceci jusqu'à ce que j'ai le temps de redéfinir le problème. S'il vous plaît aider à voter pour fermer pour non spécifique. Merci à tous pour le temps investi ici. –