Coldfusion Заполнить форму выпадающим выбором с помощью ajax

Итак, у меня есть проект, использующий ColdFusion, и у него есть форма с раскрывающимся списком.

See example: http://jsfiddle.net/mwoods98/KXmNK/

Что мне нужно сделать после выбора раскрывающегося списка, так это вызов ajax для вызова ColdFusion cfc, который возвращает информацию для заполнения формы, находящейся под раскрывающимся списком.

Используя приведенную выше скрипку в качестве примера, если пользователь выбрал «2», тогда в поле имени будет Боб, 202 Fake Street и 111-555-1234. Если бы они выбрали "3", они бы получили все, что возвращается из CFC (базы данных).

У CFC будет просто вызов метода, который будет собирать информацию на основе значения числа, представленного через раскрывающийся список.

Любая помощь будет оценена по достоинству.

Спасибо


person weggie    schedule 01.05.2013    source источник


Ответы (3)


Если вы используете jQuery, вы можете использовать функцию ajax, встроенную в jquery, для вызова CFC и возврата результата и заполнения полей. Кстати, если вы хотите сделать это, размещение идентификаторов в полях будет ОЧЕНЬ полезным.

$.ajax({
    type: 'get',
    url: 'pathToMy.cfc',
    data: {method:'getNameAddressAndNumberFromID'
        , myID : valueOfItemSelectedInDropDown
        },
    dataType: 'json',
    async: false,
    success: function(result){
         $('#myNameInput').val(result.NAME);
         $('#myNameInput').val(result.ADDRESS);
         $('#myNameInput').val(result.NUMBER);
        }
    }); 

Предположим, у вас есть CFC с именем «pathToMy.cfc» с методом «getNameAddressAndNumberFromID» и у вас есть идентификатор на входах, например Name:

<input name="name" id="myNameInput" type="Text">

результат метода может вернуть имя, адрес и номер из запроса. Возврат этой информации в формате JSON будет очень полезен.

Это должно привести вас на правильный путь, удачи.

person Lance    schedule 01.05.2013
comment
Спасибо завтра попробую! - person weggie; 02.05.2013
comment
это хороший образец. вот как я это делаю. Однако вы можете показать пример того, как будет выглядеть вывод pathtoMycfc с форматированием json. - person steve; 02.05.2013
comment
Все зависит от того, как построен cfc. Лично я использую функцию QueryToArrays Бена Наделя, которую можно найти по адресу bennadel.com/blog/. Этот пост может быть полезен stackoverflow.com/questions/14149398/ - person Lance; 02.05.2013
comment
Спасибо, оба примера здесь помогли. Я немного ближе, но все еще не получаю результат. Я задам другой вопрос. Я оставлю ссылку здесь для продолжения. Спасибо за ответ. - person weggie; 06.05.2013

В моем примере у меня есть набор раскрывающихся списков, которые зависят от уровня (Coldbox 3.5+, CF9).

Используя bindCFC и cfajax , вот пример первых двух раскрывающихся списков, второй зависит

Фрагмент моего просмотра

<cfform>
    <cfselect name="groups" id="groups" bind="cfc:#getSetting('AppMapping')#.model.dynform.getGroups()" 
         bindOnLoad="Yes" 
         display="group_name" 
         value="group_id" />

    <cfselect name="events" id="events" selected="#form.event_id#" 
          bind="cfc:#getSetting('AppMapping')#.model.dynform.getEventsByGroup({groups})" 
          display="event_name" 
          value="event_id" 
          queryPosition="below">
</cfform>

Фрагмент моей модели (dynform)

<cffunction name="getGroups" access="remote" output="false" returntype="query"> 
    <cfset var qGroups = "">
    <cfquery datasource="#application.DSN#" name="qGroups">
       SELECT
               egc.nd_event_group_id                  group_id,
               egc.short_desc                         group_name
       FROM    event_group_code egc
       WHERE   egc.status_code = 'A'
       ORDER BY egc.sort_order
    </cfquery>
    <cfreturn qGroups>
</cffunction>

<cffunction name="getEventsByGroup" access="remote" output="false" returntype="query">
    <cfargument name="event_group_id" type="string" required="true">    
    <cfset var qEventsByGroup = "">
    <cfquery datasource="#application.DSN#" name="qEventsByGroup">
        SELECT ec.event_id,           
               ec.FULL_DESC as event_name              
        FROM   events ec
        WHERE  ec.event_group_id =  <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.event_group_id#"> 

    </cfquery>
    <cfreturn qEventsByGroup>
</cffunction>

Хотя вышеизложенное будет работать, в итоге я отказался от него для подхода jQuery/ajax return JSON. Причины почему:

  1. Coldbox way = работу должны выполнять обработчики, а не представления

  2. CFajax/cfselect был медленнее, чем jQuery ajax, и с меньшим количеством опций. (Что, если мне нужно поле множественного выбора? Или возвращаются три атрибута данных, а не два?)

  3. Я не хотел использовать тег cfform в моем представлении, которое требует cfselect

Я могу опубликовать способ jQuery ajax, если это необходимо, но я думаю, что ответил на исходный вопрос.

person Jay Rizzi    schedule 02.05.2013

Проще всего это сделать с помощью атрибута привязки cfselect. Однако независимо от того, используете ли вы этот метод или запускаете свой собственный jquery, сделайте следующее:

  1. Убедитесь, что ваш запрос работает, когда он не находится в cfc.
  2. Убедитесь, что ваш запрос работает, когда он находится в cfc, и вы вызываете его с помощью cfinvoke или из объекта.

Таким образом, если у вас возникнут проблемы с вызовом из ajax, вы будете знать, что виноват не cfc.

person Dan Bracuk    schedule 01.05.2013
comment
Спасибо за ответ. Я пытался держаться подальше от привязки, но мне, возможно, придется взглянуть на нее, если опция jquery не работает. Спасибо за ответ. - person weggie; 02.05.2013