2009-12-14 17 views
7

Come posso ottenere il parametro URL & Valore in Coldfusion? per Ex: -Come posso ottenere il parametro URL e il valore in Coldfusion?

mio URL è

test.cfm?par1=val1&par2=val2&par3=val3 

E 'possibile ottenere il secondo parametro e il suo valore direttamente?

con <cfset param='#url.par2#'> posso ottenere il valore di PAR2, Ma i miei parametri sono dynamicically generato da altra pagina e passato a qui (par2 potrebbe essere la prossima volta ABC2, XYZ2 ecc ..) Quindi penso modo migliore è quello di ottenere il parametro e valore in 2a possibilità (possibile non modificare sempre).

Qualsiasi idea Come posso ottenerlo?

Grazie in anticipo

risposta

5
<cfset Param2 = ListGetAt(CGI.QUERY_STRING,2,"&")> 
+2

Non so se puoi necessariamente contare sui parametri URL sempre nello stesso ordine in CGI.QUERY_STRING. – ale

+4

Questo è sbagliato, dal momento che non decodificherà l'URL. – Tomalak

+0

@Tomalak Direi che l'intero approccio è sbagliato, ma se lo vogliono, lo capiscono. – Sergii

5

Ordine di variabili di stringa query non è rilevante, o la vostra applicazione sognerei si aspettano che sia rilevante. Penso che la cosa migliore da fare sia avere un'altra variabile che è una lista delle variabili nell'ordine. Così:

test.cfm?par1=val1&par2=val2&par3=val3&list=var1,var2,var3 

Avviso la presenza della nuova variabile "lista".

Quindi prima prendi il valore di "elenco", quindi prendi la seconda voce "var2" e fai riferimento a tale ambito nell'ambito dell'URL. Si potrebbe facilmente astrarre tutto ciò in modo che i nomi delle variabili stesse non siano importanti. Sarà necessario un buon trattamento degli errori per salvaguardare le aspettative mancanti.

+0

Bene, questa è una buona soluzione, ma sto cercando se c'è la possibilità di ottenere direttamente il secondo parametro e il suo valore, invece di ottenere la lista e ottenere il suo secondo elemento .. – CFUser

+1

Questo è l'unico modo per farlo . +1 – Tomalak

+0

@Tomalak quale clan? :) – Kip

1
<cfscript> 
    par2=getToken(cgi.query_string,2,"&"); // contains "par2=val2" 
    par2name=getToken(par2,1,"="); // contains "par2" 
    par2value=urlDecode(getToken(par2,2,"=")); // contains "val2" 
</cfscript> 

È anche possibile utilizzare la funzione listGetAt, che è sostanzialmente equivalente a ControllaToken, con sintassi leggermente diversa.

+1

Questo è sbagliato, dal momento che non decodificherà l'URL del valore. – Tomalak

+0

Abbastanza corretto, aggiunta decodifica url. – davidcl

21

è anche possibile accedere l'ambito url come una struttura, quindi si può ottenere:

<cfset param2 = url['param2'] /> 

Ciò è utile se si potrebbe avere una convenzione di denominazione per un gruppo di campi. Diciamo che sta raccogliendo nomi e le email in questo modo:

[email protected]&name1=Fred&[email protected]&name2=Sally 

Si potrebbe scrivere qualcosa di simile a:

<cfloop condition="someCondition"> 
    <cfset email = url['email' & i] /> 
    <cfset name = url['name' & i] /> 
    <!--- Do something ---> 
    <cfset i++ /> 
</cfloop> 
3

per ottenere l'elenco dei params è possibile utilizzare structKeyList (URL) o structKeyArray (url), allora accedere a tali parametri attraverso il campo url del tipo #URL [ 'par1'] #

<cfset params = structKeyList(url) /> 
<cfdump label="parameters" var="#params#" /> 

<cfloop index="ix" list="#params#"> 
    <cfoutput><div>#ix# = #url[ix]#</div></cfoutput> 
</cfloop> 

come altri hanno detto, davvero non dovrebbe fare affidamento su l'ordine dei parametri

Problemi correlati