(слишком долго для комментариев)
Что ж, на самом деле есть две части: код на стороне сервера (CF) и на стороне клиента (Javascript / Ajax).Полный пример немного длинен для одного потока SO.Если бы это был я, я бы сосредоточился на первом написании кода CF.Получите <cfcomponent>
для возврата нужных вам данных в нужном формате.После того, как все заработало, перейдите к клиентскому коду.
Что касается кода ColdFusion, ваш текущий CFC выглядит хорошо.Единственное, что я бы изменил, - это чтобы функции возвращали массив структур вместо объекта «запрос».CF по умолчанию используется в формате Wankky при сериализации объектов запроса.Лучше создавать свои собственные структуры IMO.
<cffunction name="getRegions" access="remote" returntype="array">
<cfquery name="local.getData" datasource="#variables.dsn#">
SELECT Region_Id, Region
FROM Regions
ORDER BY Region
</cfquery>
<!--- convert each record into structure and append to array --->
<cfset local.results = []>
<cfloop query="local.getData">
<cfset arrayAppend(local.results, {"value": region_id, "label": region})>
</cfloop>
<cfreturn local.results />
</cffunction>
Чтобы увидеть, какие данные получит вызов ajax, загрузите их в браузере и протестируйте удаленную функцию:
http://localhost/YourComponent.cfc?method=getRegions&returnformat=json
Вы можете создать аналогичную функцию для возврата центров, связанных с конкретным идентификатором региона.Единственное отличие состоит в том, что в качестве аргумента требуется идентификатор региона:
<cffunction name="getCenters" access="remote" returntype="array">
<cfargument name="region_id" type="numeric" required="true">
<cfquery name="local.getData" datasource="#variables.dsn#">
SELECT Center_Id, Center
FROM Centers
WHERE Region_Id = <cfqueryparam value="#arguments.region_id#" cfsqltype="cf_sql_integer">
ORDER BY Center
</cfquery>
<!--- convert each record into structure and append to array --->
<cfset local.results = []>
<cfloop query="local.getData">
<cfset arrayAppend(local.results, {"value": center_id, "label": center})>
</cfloop>
<cfreturn local.results>
</cffunction>
Тестирование аналогично, вам просто нужно указать идентификатор региона в качестве параметра url:
http://localhost/YourComponent.cfc?method=getCenters&returnformat=json®ion_id=123