如何从AJAX调用中获取并使用通过ValueList返回的变量?
我在下面的代码执行搜索,它不工作。在search.cfm页面上,唯一返回的值是我输入到搜索字段中的值(即使我单击了一个自动提示值,它不会回来;只有实际输入的字母才会返回)。如何从AJAX调用中获取并使用通过ValueList返回的变量?
<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>
两件事情:首先,我想获得的游戏ID回到使得AJAX请求的页面;我知道为什么它不会回来:因为我只返回sResult
var,它不包含GameID。有没有办法在不显示它的情况下返回GameID值?
第二件事:如何从返回的自动提示中获取值?假设我想抓住GameID,或者如果我不能这样做,那么在我的查询中使用“TitleName”?
我试着将它传递给表格:action="search.cfm?GameID=#cfautosuggestvalue.GameID#"
- 但这不起作用。我如何引用autosuggestionvalue varaibles以供使用?
谢谢
不幸的是,你只能返回一个简单值列表/数组。你不能同时返回一个名字和另一个键。有解决方法。如果你的名字是唯一的,你可以在服务器上查看(例如,将“Raymond”转换为1),但只适用于唯一名称。我有一个博客条目,在这里进入细节:
http://www.coldfusionjedi.com/index.cfm/2009/11/22/Ask-a-Jedi-ColdFusion-Autosuggest-on-2-Columns
如果在原型/ Scriptaculous的或JQuery的结果()函数使用要么afterUpdateElement这将是可能的,很多更直接。
下面的例子分别从各自的网站采取
原型/ 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;
});
感谢雷...虽然任何想法,为什么形式只是在我的键盘输入,而不是自动建议值?例如,如果我输入“m”并显示一个“金属齿轮”,点击会将我带到search.cfm,但是当我转储#表格时#我得到“m”而不是“金属齿轮” - 为什么是那? – Mohamad 2010-03-11 15:49:39
如果绑定到onClick,它会发送'm'。如果绑定到onChange,它应该在输入字段中发送上次更改的值。 – Henry 2010-03-11 20:22:30