2 votes

Boucle sur les données soumises via la routine ajax de jquery avec Coldfusion

Si la fenêtre FF firebug, je vois que cela est transmis à ma page d'action coldfusion :

RowOrder[]=&RowOrder[]=row_5&RowOrder[]=row_2&RowOrder[]=row_1&RowOrder[]=row_3&RowOrder[]=row_4&RowOrder[]=row_6&RowOrder[]=row_7&RowOrder[]=row_8&RowOrder[]=row_11

Je dois maintenant faire une boucle pour obtenir l'ordre de tri mis à jour, mais à cause du [], j'ai des problèmes. Comment puis-je faire une boucle sur ce tableau pour pouvoir le mettre à jour ? Je m'attendais à ce que ce soit la partie la plus facile, mais j'ai manifestement raté quelque chose.

+ J'utilise le plugin jquery (http://www.isocra.com/2008/02/table-drag-and-drop-jquery-plugin/). +

Voici le code que j'utilise pour parcourir les données soumises :

<cfif StructKeyExists(form, "RowOrder")>
<!---<cfset variables.Order = ReReplaceNoCase(form.RowOrder, "(&){0,1}row_\[\]=", ",", "all") />--->    
<cfset variables.Order = ReplaceNoCase(form["RowOrder[]"],"row_","","all")>
<cfloop from="1" to="#ListLen(variables.Order)#" index="index">
<cfquery name="qryOrder" datasource="#dsn#">
update  SystemTypes
set Order = <cfqueryparam value="#index#" cfsqltype="cf_sql_integer" />
where WETypeNum = <cfqueryparam value="#ListGetAt(variables.Order, index)#" cfsqltype="cf_sql_integer" />
</cfquery>
</cfloop>
</cfif>

+ Le code ajax que j'utilise est le suivant :

$("#RowOrder").tableDnD({
    onDrop: function(table, row) {
        var RowOrderData = $.tableDnD.serialize();
        $.ajax({
            type: 'POST',
            url: '../../ajax/UpdateListingOrder.cfm',
            cache: false,
            data:  RowOrderData
        });
    }   
});

+

En + indique les informations qui ont été ajoutées après la publication de la question

1voto

Leigh Points 16126

Comment le problème se manifeste-t-il ? Obtenez-vous une erreur, la requête ne s'exécute pas, ?

Déposez le FORM pour vérifier le nom du champ transmis ? Cela ressemble à FORM['RowOrder[]'] plutôt que form.RowOrder . Dans ce cas, vous devez utiliser :

<cfif StructKeyExists(form, "RowOrder[]")>
    <cfset variables.Order = ReReplaceNoCase(form["RowOrder[]"], "(&){0,1}row_\[\]=", ",", "all") />
    ... rest of code ...
<cfelse>
    oops, that variable name does not exist
</cfif>

0voto

AlexP Points 9284

Ne pourriez-vous pas faire correspondre le numéro plutôt que de le remplacer ?

J'ai effectué la correspondance regex à l'intérieur de la boucle - Vous pouvez alors vous concentrer sur une seule partie de la chaîne à la fois.

Une illustration de l'approche :

<cfif structKeyExists(form, "rowOrder")>
  <cfset data = listToArray(form.rowOrder, "&")/>
  <cfif not arrayIsEmpty(data)>
    <cfloop form="1" to="#arrayLen(data)#" index="index">
      <cfset match = reFind("[1-9][0-9]+", data[index], 1, true)/>
      <cfif arraySum(match)>
        <cfset weTypeNumber = val(mid(data[index], match["pos"], match["len"]))/> 
        <cfquery name="qryOrder" datasource="#dsn#">
         UPDATE
            system_types
          SET 
            order = <cfqueryparam cfsqltype="cf_sql_integer" value="#index#"/>
          WHERE
            we_type_num = <cfqueryparam cfsqltype="cf_sql_integer" value="#weTypeNumber#"/>
        </cfquery>
      </cfif>
    </cfloop>
  </cfif>
</cfif>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X