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.
Cette fonction lancée dans mon navigateur est fonctionnelle et récupère correctement les résultats sous un format JSON:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 <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>
Je ne sais pas si le format de ce JSON est correct pour fonctionner avec le script JQUERY.
Code : Sélectionner tout - Visualiser dans une fenêtre à part [{"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"}]
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 script dans mon fichier CFM:
J'utilise la version JQUERY 1.1.2. et j'ai essayé d'utiliser la dernière version, mais le problème persiste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 $().ready(function() { $.ajax({ type: 'GET', url: 'transport.cfc', data: { method: 'getTransports', CITY_TO: 'LUX', CITY_FROM: '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'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
Partager