1 Dernière modification par amaseb57 (17-09-2015 15:40:03)

Sujet : JQUERY AJAX fonction success retourne “UNDEFINED” avec CFC query

Bonjour,

J'ai un problème pour utiliser JQUERY et ajax dans des listes déroulantes d'un formulaire d'une page d'un fichier Coldfusion (cfm). J'utilise Coldfusion (fichier cfc) pour faire une requête pour récupérer les résultats d'une base de données Oracle.

transport.cfc

<cfcomponent output="false">
    <cffunction name="getTransports" access="remote" returnFormat="json"  returnType="Array">
        <cfargument name="VIL_CD_DEST" type="string" required="yes">  
        <cfargument name="VIL_CD_ORIG" type="string" required="yes"> 
 
 
    <cfquery name ="transport" datasource="#application.datasource#">
    <!---Query Transports--->
        select * from APP_GEN_CODE_T where ST_CLASS_CODE = 'BUD_CTRP'
    </cfquery>
 
    <cfset transports = arrayNew(1)>
 
    <cfloop query="transport">        
 
        <cfquery name="defined_transport" datasource="#application.datasource#">
            select * from TABLE_FRAIS 
            where VIL_CD_DEST = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.VIL_CD_DEST#">
            and VIL_CD_ORIG = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.VIL_CD_ORIG#">
            and CTRP_ST_CODE = '#transport.ST_CODE#'    
        </cfquery>
 
      <cfif defined_transport.recordCount eq 0>
        <cfset transport_value = "#transport.ST_DESCRIPTION# (not defined)">
      <cfelse>  
        <cfset transport_value = "#transport.ST_DESCRIPTION#">
      </cfif>
 
        <cfset transports[currentRow]["ID"] = #transport.ST_CODE#>
        <cfset transports[currentRow]["VALUE"] = #transport_value#>
    </cfloop>
 
        <cfreturn transports>
    </cffunction>
</cfcomponent>

Cette fonction lancée dans mon navigateur est fonctionnelle et récupère correctement les résultats sous un format JSON:

[{"VALUE":"Apex (not defined)","ID":"APEX"},{"VALUE":"Plane (not defined)","ID":"AVI"},{"VALUE":"Train 1st class","ID":"TRAIN 1"},{"VALUE":"Car","ID":"VOIT"},{"VALUE":"Cost 0 (not defined)","ID":"ZERO"}]

Mais je ne sais pas si le format de ce JSON est correct pour fonctionner avec le script JQUERY ci-dessous.

Dans le script JQUERY, la fonction success ne récupère pas les résultats et un console.log(result) affiche "undefined". Si j'essaye de faire console.log(result.length), le script lance error et affiche l'erreur en retour.

Dans firebug, je peux voir dans l'onglet XHR que la requête a été lancée et les résultats en JSON (ci-dessus) sont récupérés.

Voici mon script QUERY dans mon fichier CFM:

$().ready(function() {
     $.ajax({
        type:   'GET',
        url:    'transport.cfc',
        data: {
            method:     'getTransports',
            VIL_CD_DEST:    'LUX',
            VIL_CD_ORIG:  'UWP'
        },
        dataType:       'json',
        contentType:    'application/json',
 
        success: function(result) {
            var select = $("##transp"); // utilisation de ## pour échapper # car nous sommes en coldfusion
            select.empty();
            select.append(
                new Option('Select transport', '-1')
            );
            console.log(result) // affiche "undifined"
 
            /* GENERE ERREUR
            $.each(result, function(i, item) {
                select.append(
                    new Option(item.ID, item.VALUE)
                );
            });*/
        },
 
        error: function(xhr, message) {
            alert('ajax request failed');
            console.log(xhr, message);
        }
     });
});

J'utilise la version JQUERY 1.1.2. et j'ai essayé d'utiliser la dernière version, mais le problème persiste.

J'ai essayé de suivre la solution proposée dans un forum: remplacer json par jsonp. En faisant cela, les résultats sont bien affichés dans la console grâce au console.log(result) mais la boucle each n'est pas parcourue et l'erreur 'ajax request failed' apparaît à nouveau.

Pourriez-vous m'aider à résoudre ce problème svp car je ne sais pas comment faire cela.

Merci d'avance pour votre aide