Как мне получить и использовать переменные, возвращаемые через ValueList из вызова AJAX? - PullRequest
2 голосов
/ 11 марта 2010

Я пытаюсь выполнить следующий код для поиска, и он не работает. На странице search.cfm единственное возвращаемое значение - это значение, введенное мной в поле поиска (даже если я щелкаю по самосовершенствующемуся значению, оно не возвращается; возвращаются только те буквы, которые я сам набираю).

<cfform class="titleSearchForm" id="searchForm" action="search.cfm?GameID=#cfautosuggestvalue.GameID#" method="post">
    <fieldset>
        <cfinput type="text" class="titleSearchField" name="TitleName" onChange="form.submit()" autosuggest="cfc:gz.cfcomp.search.AutoSuggestSearch({cfautosuggestvalue})">
        <input type="button" class="titleSearchButton" value=" " />
    </fieldset>
</cfform>

Запрос в CFC:

    <cfquery name="SearchResult" datasource="myDSN">
        SELECT CONCAT(titles.TitleName, ' on ', platforms.PlatformAbbreviation) AS sResult, games.GameID
        FROM
            games
            Inner Join platforms ON games.PlatformID = platforms.PlatformID
            Inner Join titles ON titles.TitleID = games.TitleID
        WHERE
            UCase(titleName) LIKE Ucase('#ARGUMENTS.SearchString#%')
        ORDER BY
            titleName ASC;
    </cfquery>

Две вещи: во-первых, я хотел бы вернуть GameID на страницу с запросом AJAX; Я знаю, почему он не возвращается: потому что я только возвращаю sResult var, который не включает GameID. Есть ли способ вернуть значение GameID без его отображения?

Второе: как получить значение из автоматического предложения при его возврате? Скажем, я хочу получить GameID или, если я не могу этого сделать, «TitleName», чтобы использовать это в моем запросе?

Я попытался передать его в форму следующим образом: action="search.cfm?GameID=#cfautosuggestvalue.GameID#" - но это не работает. Как мне сослаться на переменные autosuggestionvalue для использования?

Спасибо

Ответы [ 2 ]

1 голос
/ 22 апреля 2010

Если бы вы использовали либо afterUpdateElement в prototype / scriptaculous, либо функцию result () в JQuery, это было бы возможно и намного проще.

Следующие примеры взяты с соответствующих сайтов

прототип / Scriptaculous:

<ul>
    <li id="1">your mom</li>
    <li id="2">yodel</li>
</ul>

new Ajax.Autocompleter("autocomplete", "autocomplete_choices", "/url/on/server", {
  afterUpdateElement : getSelectionId
});

function getSelectionId(text, li) {
    alert (li.id);
}

1010 * JQuery *

var data = [ {text:'Link A', url:'/page1'}, {text:'Link B', url: '/page2'} ];
$("...").autocomplete(data, {
  formatItem: function(item) {
    return item.text;
  }
}).result(function(event, item) {
  location.href = item.url;
});
1 голос
/ 11 марта 2010

К сожалению, вы можете вернуть только список / массив простых значений. Вы не можете вернуть и имя, и другой ключ. Есть обходные пути. Если ваши имена уникальны, вы можете найти их на сервере (то есть преобразовать «Раймонд» в 1), но это работает только для уникальных имен. У меня есть запись в блоге, которая подробно описана здесь:

http://www.coldfusionjedi.com/index.cfm/2009/11/22/Ask-a-Jedi-ColdFusion-Autosuggest-on-2-Columns

...