私は構造体の配列をajaxで返して、自動補完機能を提供しようとしています。 getEmployeeNameは、テキストボックスを挿入するページからajaxを使用して呼び出しを試みています。私が試してみましたcoldfusion ajax jsonデータが正しい形式でないデータを返す
$("#task_coordinator").autocomplete({
source: function (request, response) {
$.ajax({
url: "test.cfc?method=getEmployeeName",
type: "GET",
data: request,
success: function (data) {
console.log(data);
console.log(data.array([label]));
},
error: function(jqXHR, extStatus,errorThrown){
alert(errorThrown);
}
});
},
select: function (event, ui) {
}
,minLength:5
});
かどうかを確認するためのリンクを介して直接メソッドを呼び出して、次のよう
<cfcomponent>
<cffunction name="getEmployeeName" access="remote" returnformat="JSON" >
<cfargument name="term" type="string" required="yes">
<cfset var returnArray=ArrayNew(1) />
<cfset term=#Ucase(term)#>
<cfquery name="getEmps" datasource="mines">
...
<!--- my query ---!>
</cfquery>
<cfoutput>
<cfloop query="getEmps">
<cfset empStruct = StructNew() />
<cfset empStruct["label"] = #emp_name# & " " &#desg_desc# & " " & #unit_name# />
<cfset empStruct["value"] = #cpf_no#>
<cfset ArrayAppend(returnArray,empStruct) />
</cfloop>
</cfoutput>
<cfreturn #serializeJSON(returnArray)#>
</cffunction>
AJAX呼び出しがあり、次のように
test.cfcですそれは正常に動作しているかどうか。そこでは、この追加情報ではなく、jsonデータのみが返されます。私の出力には、jsonデータの前に余分なスクリプトがあります。
<script type="text/javascript">/* <![CDATA[ */_cf_loadingtexthtml="<img alt=' ' src='/CFIDE/scripts/ajax/resources/cf/images/loading.gif'/>";
_cf_contextpath="";
_cf_ajaxscriptsrc="/CFIDE/scripts/ajax";
_cf_jsonprefix='//';
_cf_websocket_port=8577;
_cf_flash_policy_port=1243;
/* ]]> */</script><script type="text/javascript"
src="/CFIDE/scripts/ajax/messages/cfmessage.js"></script>
<script type="text/javascript" src="/CFIDE/scripts/ajax/package/cfajax.js">
</script>
<script type="text/javascript" src="/CFIDE/scripts/cfform.js"></script>
<script type="text/javascript" src="/CFIDE/scripts/masks.js"></script>
<script type="text/javascript" src="/CFIDE/scripts/cfformhistory.js">
</script>
<script type="text/javascript">/* <![CDATA[ */
ColdFusion.Ajax.importTag('CFAJAXPROXY');
/* ]]> */</script>
<script type="text/javascript">/* <![CDATA[ */
ColdFusion.Ajax.importTag('CFFORM');
/* ]]> */</script>
<script type="text/javascript">
<!--
_CF_checkCFForm_1 = function(_CF_this)
{
//reset on submit
_CF_error_exists = false;
_CF_error_messages = new Array();
_CF_error_fields = new Object();
_CF_FirstErrorField = null;
//display error messages and return success
if(_CF_error_exists)
{
if(_CF_error_messages.length > 0)
{
// show alert() message
_CF_onErrorAlert(_CF_error_messages);
// set focus to first form error, if the field supports js focus().
if(_CF_this[_CF_FirstErrorField].type == "text")
{ _CF_this[_CF_FirstErrorField].focus(); }
}
return false;
}else {
return true;
}
}
//-->
</script>
[{"value":47455,"label":"BANTHIA ANUJA RAVINDRAKUMAR GRADUATE EXECUTIVE TRAINEE(E2) CENTRAL ESTABLISHMENT"}]
誰かがこの余分なスクリプトがなぜ来るのか教えてください。前もって感謝します!
私はすべてのコードを読んだわけではありませんが、ループ内にStructNew()関数があることが分かりました。それが問題の原因です。 –
CFMページに 'cfajaxproxy'タグがあるような余分なコードがあります。また、あなたの関数は 'returntype ="配列 "を持っているはずです。 'returnformat =" json "'を使うことで 'SerializeJSON'は必要ありません。そして、あなたは ' ... 'は必要ありません。 –
snackboy
@snackboyが正しいです。この追加のスクリプトは 'cfajaxproxy'を使うときに追加されます。 –