2017-09-29 7 views
0

Ich versuche, ein Array von Struktur durch Ajax zurückzugeben, um Autocomplete-Funktion zur Verfügung zu stellen. Ich versuche getEmployeeName über Ajax von der Seite, wo ich die Textbox auffüllen möchte.Coldfusion Ajax JSON Daten zurück Daten nicht im richtigen Format

Die test.cfc ist wie folgt:

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

Der Ajax-Aufruf lautet wie folgt:

$("#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 
    }); 

habe ich versucht, das Verfahren direkt über den Link aufrufen, ob zu sehen es funktioniert gut oder nicht. Dabei gibt es nur json-Daten und nicht diese zusätzlichen Informationen zurück. Meine Ausgabe hat zusätzliches Skript vor JSON-Daten:

<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"}] 

Kann mir jemand sagen, warum dieses zusätzliche Skript kommt. Danke im Voraus!

+0

Ich habe nicht Ihren ganzen Code gelesen, aber ich habe genug gelesen, um zu sehen, dass Sie eine StructNew() Funktion in einer Schleife haben. Das ist eine häufige Ursache von Problemen. –

+1

Dieser zusätzliche Code sieht aus wie ein 'cfajaxproxy' Tag in Ihrer CFM-Seite. Außerdem sollte Ihre Funktion wahrscheinlich einen 'returntype =" array "' haben. Mit 'returnformat =" json "' brauchen Sie nicht den 'SerializeJSON'. Und Sie brauchen nicht die ' ...'. – snackboy

+0

@snackboy ist korrekt. Dieses zusätzliche Skript wird hinzugefügt, wenn Sie 'cfajaxproxy' verwenden. –

Antwort

Verwandte Themen