Как я могу получить параметр URL и значение в Coldfusion? - PullRequest
7 голосов
/ 15 декабря 2009

Как я могу получить параметр URL и значение в Coldfusion? Например: -

мой URL-адрес

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

Можно ли получить второй параметр и его значение напрямую?

с <cfset param='#url.par2#'> Я могу получить значение par2, Но мои параметры динамически генерируются с другой страницы и передаются сюда (par2 может быть в следующий раз abc2, xyz2 и т. Поэтому я думаю, что лучший способ - получить параметр и значение во втором варианте (вариант не всегда меняется).

Любая идея Как я могу получить это?

Заранее спасибо

Ответы [ 5 ]

21 голосов
/ 15 декабря 2009

Вы также можете получить доступ к области действия url в виде структуры, чтобы вы могли получить:

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

Это полезно, если у вас может быть соглашение об именах для нескольких полей. Допустим, вы собираете имена и электронные письма примерно так:

email1=foo@bar.com&name1=Fred&email2=xxx@yyy.com&name2=Sally

Вы можете написать что-то вроде:

<cfloop condition="someCondition">
    <cfset email = url['email' & i] />
    <cfset name = url['name' & i] />
    <!--- Do something --->
    <cfset i++ />
</cfloop>
5 голосов
/ 15 декабря 2009
   <cfset Param2 = ListGetAt(CGI.QUERY_STRING,2,"&")>
5 голосов
/ 15 декабря 2009

Порядок переменных строки запроса не релевантен, или ваше приложение не должно ожидать, что оно будет релевантным. Я думаю, что вам лучше всего иметь другую переменную, которая представляет собой список переменных в заказе. Вот так:

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

Обратите внимание на наличие новой переменной "list".

Таким образом, вы сначала берете значение «list», а затем берете его во 2-й записи «var2» и ссылаетесь на него в области действия URL. Вы можете легко абстрагировать все это, поэтому имена переменных сами по себе не имеют значения. Хорошая обработка ошибок будет необходима для защиты от недостающих ожиданий.

3 голосов
/ 16 декабря 2009

, чтобы получить список параметров, вы можете использовать structKeyList (url) или structKeyArray (url), а затем обращаться к этим параметрам через область видимости url, например #url ['par1'] #

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

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

как уже упоминали другие, вы действительно не должны полагаться на порядок параметров

1 голос
/ 15 декабря 2009
<cfscript>
    par2=getToken(cgi.query_string,2,"&"); // contains "par2=val2"
    par2name=getToken(par2,1,"="); // contains "par2"
    par2value=urlDecode(getToken(par2,2,"=")); // contains "val2"
</cfscript>

Вы также можете использовать функцию listGetAt, которая в основном эквивалентна getToken, с немного другим синтаксисом.

...