2016-05-17 2 views
2

この質問は以前何度か尋ねられましたが、うまくいかない理由がたくさんあるようです。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> 

ここには、私が受け取っているサンプルの応答があります。私はその問題は、その応答の始めにある二重スラッシュ "//"であると信じています。

Sample response received


全ページコード:

<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> 
+1

*問題は「//」二重スラッシュであると信じています*良い推測です。それはクロスサイトスクリプティング攻撃からの保護です:http://stackoverflow.com/questions/15501123/coldfusion-10-returnformat-json-adding-characters – Leigh

+0

それに感謝します。それはcffunctionでその設定を無効にすることができると言います。あなたはどのように知っているだろうか? –

+0

私はそれが関数でオーバーライドできるとは思わない。しかし、これは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

答えて

1

が、これはクロスサイトを防ぐためですスクリプト攻撃。そして次のソリューションに私を指摘:

Coldfusion 10 returnformat="JSON" adding characters

そのソリューションを読んだ後、私はあなたが属性としてこれを追加することにより、cffunctionごとにそれを無効にすることが分かっ:

secureJSON="false"

そのすべてを含めた後、期待どおりに働いた。

関連する問題