2017-07-10 6 views
0

J'ai une forme simple qui a plus de 100 champs. Tous ces champs sont soumis à cffunction où j'ai le code SQL qui exécutera la requête d'insertion ou de mise à jour. Voici mon exemple de code:Comment construire des arguments dynamiques dans ColdFusion9?

var formData = $('#'+frmID).serialize(); 
    $.ajax({ 
     type: 'POST', 
     url: 'Components/MyFunction.cfc?method=userRecord', 
     data: formData, 
     dataType: 'json' 
    }).done(function(obj){ 
     if(obj.STATUS === 200){ 
      return true; 
     }else{ 
      return false; 
     } 
    }).fail(function(jqXHR, textStatus, errorThrown){ 
     alert(errorThrown); 
    }); 

Voici cffunction:

<cffunction name="userRecord" access="remote" output="true" returnformat="JSON"> 
    <cfargument name="userID" type="string" required="true"> 
    <cfargument name="userFName" type="string" required="true"> 
    <cfargument name="userLName" type="string" required="true"> 
    <cfargument name="userDOB" type="string" required="true"> 
    <cfargument name="userGender" type="string" required="true"> 
    <cfargument name="userAddress" type="string" required="true"> 
    <cfargument name="userCity" type="string" required="true"> 
    .... And there is more field in this form 


    <cfset fnResults = StructNew()> 
    //Here is SQL query for insert and update 
    <cfreturn fnResults> 
</cffunction> 

Au lieu de créer tous les arguments manuellement il un moyen d'utiliser cfloop et de recueillir tous les arguments dynamiquement? Je n'ai trouvé aucun article ou exemple. Serait-ce une bonne option ou la création d'arguments manuellement est une meilleure approche? Si quelqu'un peut aider s'il vous plaît faites le moi savoir. Je vous remercie!

+1

Dans ce cas, ne pouvez-vous pas passer tous les champs dans une structure unique? – Vineesh

+0

@Vineesh Comment cela va changer ce que j'ai déjà? –

+0

@espresso_coffee passe la structure entière de la forme à la fonction, donc il n'y a qu'un argument accepté qui est une structure de tous les champs de formulaire. –

Répondre

2

Essayez de transmettre les données sous forme de structure.

<cffunction name="userRecord" access="remote" output="true" returnformat="JSON"> 
    <cfargument name="formData" type="structure" required="true"> 

    <cfloop collection="#arguments.formData#" item="key"> 
     #key#: #arguments.formData[key]# 
    </cfloop> 

    <cfset fnResults = StructNew()> 
    //Here is SQL query for insert and update 
    <cfreturn fnResults> 
</cffunction> 
+0

Je veux construire des arguments avec cfloop. J'ai plus de 100 arguments dans mon formulaire et je ne veux pas coder dur chacun d'entre eux. –

+0

Vous pouvez utiliser ' # clé #: #myStructure [clé] # ' Mise à jour dans la réponse – Vineesh

1

Passez les données de formulaire entières en tant que structure.

var formData = $('#'+frmID).serializeArray(); 
$.ajax({ 
    type: 'POST', 
    url: 'Components/MyFunction.cfc?method=userRecord', 
    data: formData, 
    dataType: 'json' 
}).done(function(obj){ 
    if(obj.STATUS === 200){ 
     return true; 
    }else{ 
     return false; 
    } 
}).fail(function(jqXHR, textStatus, errorThrown){ 
    alert(errorThrown); 
}); 

<cffunction name="userRecord" access="remote" output="true" returnformat="JSON"> 
    <cfargument name="form" type="struct" required="true"> 
    <cfdump var="#arguments.form#"> 

</cffunction> 
+0

Comment obtenir le nom des cfaruments? –

+0

Dump les arguments, comme je l'ai fait dans la réponse? –

+0

Puis-je utiliser cfloop et obtenir le nom de chaque argument? –