Ich versuche AngularJS mit einem ColdFusion-Backend aufzunehmen und stoße auf einige Hindernisse. Ich ändere ihre "To Do" App http://angularjs.org/ mit der CF Art Gallery Datenbank. Ich versuche, einen ColdFusion CFC über AJAX mit einer Angular-App zu verknüpfen.AngularJS und ColdFusion CFCs
Unten ist mein artists.cfc:
<cfcomponent>
<cffunction name="getArtists" access="remote" >
<cfargument name="firstName" default="">
<cfargument name="lastName" default="">
<cfquery name="getArtists_sql" datasource="cfartgallery">
SELECT
firstname as text,
lastname as done
FROM artists
WHERE 0=0
<cfif firstName neq "">
AND ucase(firstname) like ucase('%#FIRSTNAME#%')
</cfif>
<cfif lastName neq "">
OR ucase(lastname) like ucase('%#LASTNAME#%')
</cfif>
</cfquery>
<cfreturn getArtists_sql>
</cffunction>
</cfcomponent>
Ich nenne die CFC AngularJS mit dem folgenden Code:
function TodoCtrl($scope, $http) {
$http.get('cfc/artists.cfc?method=getArtists&returnformat=json').
success(function (response) {
$scope.todos = data.DATA;
}).
error(function (data) {
$scope.todos = data;
});
}
Ich weiß, dass ich eine Antwort bekommen. Unten ist die JSON-String Chrome-Entwickler-Tools für mich Returns:
{
"COLUMNS":
["TEXT","DONE"],
"DATA":[
["Aiden","Donolan"],
["Austin","Weber"],
["Elicia","Kim"],
["Jeff","Baclawski"],
["Lori","Johnson"],
["Maxwell","Wilson"],
["Paul","Trani"],
["Raquel","Young"],
["Viata","Trenton"],
["Diane","Demo"],
["Anthony","Kunovic"],
["Ellery","Buntel"],
["Emma","Buntel"],
["Taylor Webb","Frazier"],
["Mike","Nimer"]
]}
Das ist nicht wie die Notation in ihrer Demo verwendet Angular sieht:
[
{text:'learn angular', done:true},
{text:'build an angular app', done:false}
]
jemand mich in die richtige Richtung zeigen kann, wie auf Wie kann ich dafür sorgen, dass dies richtig funktioniert? Idealerweise möchte ich den CFC intakt lassen, damit er für eine andere Anwendung wiederverwendet werden kann, so dass die JSON-Manipulation im Javascript-Ende erfolgen müsste.
Was genau ist Ihre Frage? Übrigens verweist Ihr Erfolgsrückruf nicht korrekt auf Antwortdaten. Es sollte 'function (response) {$ scope.todos = response.data.DATA; } '. – Stewie
Ausdrücklich gesagt, meine Frage wäre "Wie ersetze ich die Informationen aus AngularJS TODO Tutorial mit einem von der artist.cfc? Ich habe versucht, die Funktion (Antwort) {$ scope.todos = response.data.DATA;} 'und ich bekomme einen' TypeError: Kann die Eigenschaft 'DATA' von 'undefined' nicht lesen – Chester
Mein Fehler, ich habe die explizite 'promise.success' Methode (die den Callback mit Daten und Status Parametern füttert) mit' promise.then 'verwechselt Methode, die die Callbacks mit dem Antwortobjekt füttert, das eine Dateneigenschaft hat, aber in diesem Fall sollte Ihr Callback 'function (data) {$ scope.todos = data.DATA;}' sein, da Ihre tatsächliche Ajax-Antwort gegeben ist body gibt wirklich den JSON zurück, den Sie in Ihrer Antwort gepostet haben. – Stewie