如何从AJAX调用中获取并使用通过ValueList返回的变量?

时间:2010-03-11 14:26:49

标签: ajax search coldfusion autosuggest

我正在尝试以下代码来执行搜索,但它无法正常工作。在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 varaibles使用?

由于

2 个答案:

答案 0 :(得分:1)

不幸的是,您只能返回简单值的列表/数组。您不能同时返回名称和其他密钥。有解决方法。如果您的名字是唯一的,您可以在服务器上查找(即将“Raymond”转换为1),但这仅适用于唯一名称。我有一篇博客文章详细介绍:

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

答案 1 :(得分:1)

如果您在原型/ scriptaculous中使用afterUpdateElement或在JQuery中使用result()函数,那么这将是可能的,而且更直接。

以下示例均来自各自的网站

原型/ 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);
}

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;
});