Как получить доступ к идентификатору параметра URL в Coldfusion, если после хештега #?

После попытки около часа безуспешно... (coldfusion8) глупый вопрос, но я застрял

Мой URL (Jquery Mobile, нет pushstate, поэтому он выглядит так):

 http://www.page.de/test/mem/search.cfm#/test/mem/search.cfm?id=9900000003869

Если я выведу:

<cfdump output="e:\website\dump.txt" label="catch" var="#url#">

Я получаю это:

catch - struct

ID: 9900000003869

Но как мне получить к нему доступ... Я пытаюсь навсегда, ничего не работает

<cfdump output="e:\website\dump.txt" label="catch" var="#id#">
<cfdump output="e:\website\dump.txt" label="catch" var="#ID#">
<cfdump output="e:\website\dump.txt" label="catch" var="#url.id#">
<cfdump output="e:\website\dump.txt" label="catch" var="#url.ID#">
<cfdump output="e:\website\dump.txt" label="catch" var="#StructGetValue(url,"id")d#">
...

Спасибо за помощь!

3 ответа

Решение

Хорошо... Это работает:

  URL = http://www.page.de/test/mem/search.cfm#/test/mem/search.cfm?id=9900000003869

  <cfset objRequest = GetPageContext().GetRequest() />
  <cfset strUrl = right( objRequest.GetRequestUrl().Append( "?" & objRequest.GetQueryString() ).ToString(), 13)>

кредит

Если кому-то будет проще, пожалуйста, напишите. Я проверю как ответ.

Проведя некоторое исследование по идентификаторам фрагментов (что для меня является новым термином:(), вызванное комментариями Питера и Дункана, я нашел из вики: http://en.wikipedia.org/wiki/Fragment_identifier

Идентификатор фрагмента функционирует иначе, чем остальная часть URI: а именно, его обработка выполняется исключительно на стороне клиента без участия сервера - конечно, сервер обычно помогает определить тип MIME, а тип MIME определяет обработку фрагментов. Когда агент (например, веб-браузер) запрашивает ресурс у веб-сервера, агент отправляет URI на сервер, но не отправляет фрагмент. Вместо этого агент ожидает от сервера отправки ресурса, а затем агент обрабатывает ресурс в соответствии с типом документа и значением фрагмента.

Теперь, когда ваш клиент отправляет фрагмент, а переменная url по какой-то причине доступна вам, я использую это в моем первоначальном посте.

<cfoutput> 

обычно вы выводите переменную или другие оценки на экран.

<cfset myName = "Travis">
<cfoutput>Hello, my name is #myName#</cfoutput>

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

<cfset myFullName = myName & " Mak">

Вы также можете использовать переменные в запросе

<cfquery name = "qSomeQuery" datasource = "#application.dsn#">
  select * from table where id = #url.id#
</cfquery>

Однако это плохой способ использовать его в запросе, вы всегда должны использовать параметр cfquery.

<cfquery name = "qSomeQuery" datasource = "#application.dsn#">
  select * from table where id = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.id#">
</cfquery>

Проблема, возникающая при тестировании переменной, связана с неправильным синтаксисом.

<cfif isDefined("url.id")> вирши <cfif isDefined(url.id)> более точный тест <cfif structKeyExists(url, "id")>

По какой-то причине мой CF-сервер усекает все в URL после #, но у вашего, похоже, нет этой проблемы. Как говорит ваш cfdump, вы можете видеть ваши переменные url, так что "получить доступ" к переменной url так же просто, как и использовать ее: #url.id# или тестирую это <cfif isDefined("url.id")>

Вы пытаетесь прочитать это из текстового файла?

Можете ли вы не просто использовать:

<cfdump label="catch" var="#url.id#" />

Это работает?

РЕДАКТИРОВАТЬ:

Не могли бы вы попытаться захватить и отформатировать то, что вам нужно сначала, а затем после записи в файл?

Например, попробуйте использовать:

<cfsavecontent variable="myFileContents">
<cfoutput>#url.id#</cfoutput>
</cfsavecontent>

<cffile action="Write" file="e:\website\dump.txt" output="#myFileContents#" />

Я не проверял этот код, но попробуйте и посмотрите!

Возможно, вы захотите проверить эту переменную URL, используя isDefined()

Удачи.

Другие вопросы по тегам