この質問は以前何度か尋ねられましたが、うまくいかない理由がたくさんあるようです。Jquery Autocompleteドロップダウンを表示していません
私の問題はJSONレスポンスにあると思います。 (私がColdFusionを使用している場合はそれを使用しています)。私はこれを試すために空白のテストページを作ったので、他のものはそれを台無しにすることはできないと知っています。
値の配列(WORKS)だけでテストオートコンプリートを作成しました。
$("##txtLanguage").autocomplete({ source: ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"] });
しかし、ダイナミックオートコンプリートを使用しようとしています。私はcfcでそれを使用しており、応答を受けています。ただし、そのフィールドのオートコンプリートは機能しません。
<script type="text/javascript">
$(document).ready(function() {
$("##txtLanguage").autocomplete({ source: ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"] });
$("##name").autocomplete({
source: function(query, response) {
$.ajax({
url: "/cfc/autocomplete.cfc?method=queryNames&returnformat=json",
dataType: "json",
data: {
searchPhrase: query.term
},
success: function(result) {
response(result);
}
});
}
});
});
</script>
ここには、私が受け取っているサンプルの応答があります。私はその問題は、その応答の始めにある二重スラッシュ "//"であると信じています。
全ページコード:
<cfset pageTitle = "Self Help Admin">
<cfoutput>
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("##txtLanguage").autocomplete({ source: ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"] });
$("##name").autocomplete({
source: function(query, response) {
$.ajax({
url: "/cfc/autocomplete.cfc?method=queryNames&returnformat=json",
dataType: "json",
data: {
searchPhrase: query.term
},
success: function(result) {
response(result);
}
});
}
});
});
</script>
<form>
test <input type="text" id="txtLanguage"/>
User: <input type="text" id="name" />
<input type="button" id="submit" value="Submit" />
</form>
<br>
</cfoutput>
全CFCコード:リーが指摘したように
<cfcomponent>
<cfinclude template = "init.cfm">
<!--- ================================================================== --->
<!--- user Autocomplete --->
<!--- ================================================================== --->
<cffunction name="queryNames" access="remote">
<cfargument name="searchPhrase">
<cfquery name="query_names" dataSource="#dsn.yTen#">
SELECT name
FROM users
WHERE LOWER(name) LIKE <cfqueryparam cfsqltype='cf_sql_varchar' value="%#LCASE(arguments.searchPhrase)#%">
ORDER BY name
</cfquery>
<cfset result = arrayNew(1) >
<cfloop query="query_names">
<cfset ArrayAppend(result, query_names.Name)>
</cfloop>
<cfreturn result>
</cffunction>
</cfcomponent>
*問題は「//」二重スラッシュであると信じています*良い推測です。それはクロスサイトスクリプティング攻撃からの保護です:http://stackoverflow.com/questions/15501123/coldfusion-10-returnformat-json-adding-characters – Leigh
それに感謝します。それはcffunctionでその設定を無効にすることができると言います。あなたはどのように知っているだろうか? –
私はそれが関数でオーバーライドできるとは思わない。しかし、これはApplication.cfcでアプリごとに無効にすることができます(注意して使用してください)。また、 '$ .ajaxSetup({' function here:http://web.archive.org /web/20130117041105/http://www.raymondcamden.com/index.cfm/2011/11/8/Handling-JSON-with-prefixes-in-jQuery-and-jQueryUI – Leigh