$.ajax ColdFusion cfc JSON Bonjour tout le Monde
J'ai simplifié cet exemple autant que je le peux. J'ai une fonction de télécommande:
<cfcomponent output="false">
<cffunction name="Read" access="remote" output="false">
<cfset var local = {}>
<cfquery name="local.qry" datasource="myDatasource">
SELECT PersonID,FirstName,LastName FROM Person
</cfquery>
<cfreturn local.qry>
</cffunction>
</cfcomponent>
Et à l'aide de jQuery $.ajax méthode, je voudrais faire une liste non-ordonnée de tout le monde.
<!DOCTYPE HTML>
<html>
<head>
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("jquery", "1");
</script>
<script type="text/javascript">
jQuery(function($){
$.ajax({
url: "Remote/Person.cfc?method=Read&ReturnFormat=json",
success: function(data){
var str = '<ul>';
//This is where I need help:
for (var I=0; I<data.length; I++) {
str += '<li>' + I + data[I][1]+ '</li>'
}
str += '</ul>';
$('body').html(str);
},
error: function(ErrorMsg){
console.log("Error");
}
});
});
</script>
</head>
<body>
</body>
</html>
La partie où je suis perdu, c'est là où je suis en boucle sur les données.
Je préfère l'utilisation de jQuery $.ajax méthode parce que je comprends que $.obtenir et $.post de ne pas avoir d'erreur de piégeage.
Je ne sais pas comment gérer JSON retourné à partir de la cfc.
Vous devez vous connecter pour publier un commentaire.
Semble que le résultat est au format json(vérifier les docs http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_f_21.html).
"Si vous spécifiez returnformat="json" et la fonction renvoie une requête, ColdFusion sérialise la requête dans un Objet JSON avec deux entrées, et un ensemble de noms de colonnes, et d'un tableau de données de la colonne des tableaux. Pour plus d'informations, voir SerializeJSON." http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_f_21.html
De sorte que le premier tableau(de données.Les COLONNES doit être un tableau de noms de colonne. les données.Les COLONNES[0] serait vous donner le nom de la première colonne. les données.DATA[0] serait vous donner la première ligne de la requête.
Une belle astuce consiste à utiliser la console.log(data) dans chrome ou de la console de firebug pour afficher les données dans une forme structurée.
Je n'ai pas tester, mais il devrait être proche. Juste de la génération d'un tableau de base de données.
var data = response.data;
devrait êtrevar data = response.DATA;
aussi vos boucles for sont foiré. Le premier devrait êtreresponse.COLUMNS.length
etresponse.COLUMNS[i]
et le deuxième et le troisième devrait êtredata.length
etdata[i].length
,data[i][j]
respectivement.La façon la plus simple serait de voir comment le retour JSON de données est structurée. Ensuite, il ne devrait pas être trop dur à transversale de la JS objet. Avez-vous essayé JSON de la Visualisation? http://chris.photobooks.com/json/default.htm
Si vous avez besoin de la PersonID, vous pouvez revenir tableau ou une liste de PersonID de FC.
Ou en option, vous pouvez demander à FC de retour en texte Brut, avec tous les
<li>
's généré. Le message passé par l'ajax sera plus grande, mais vous aurez moins de code JS à maintenir. CFML est plus facile à maintenir, à droite? 🙂Je ne suis pas très familier avec ColdFusion, mais avez-vous essayé le réglage du type de données en JSON?
Qui devrait fonctionner si les données que vous obtenez de retour ressemble à quelque chose comme:
Si le ci-dessus ne fonctionne pas si vous pouviez montrer les premières données JSON renvoyé par votre demande, je devrais être en mesure de facilement le fixer.
Aussi, ne sais pas si c'est dans votre code, mais vous avez manqué un point-virgule à la fin de la ligne dans la boucle for.
console.log(ErrorMsg)
au lieu d'une chaîne et laissez-moi savoir quelle est l'erreur.Options :
Dans votre cas, je l'avais mis
MAIS
cela fait la même chose que
returntype="string" returnformat="plain" + <cfreturn serializeJSON(query) >
et c'est un problème de formulaire jQuery point de vue parce que vous obtenez laide de JSON, même si vous utilisez serializeJSON srerialization par des colonnes.
Autre chose, c'est serializeJSON, retourne en majuscule touches, donc attention, l'utilisation de lcase() ou write .LIKETHIS en js.
PS: Essayez cette dynamique creaiton de html en jQuery:
puis ajouter la méthode d'élément parent