Falc410
Vice Admiral
- Registriert
- Juni 2006
- Beiträge
- 6.664
Ich bin ein totaler Javascript Anfänger was Javascript angeht und versuche gerade einen REST Service abzufragen und habe dazu ein Tutorial gefunden welches mit Knockout.js arbeitet. Da wurde gezeigt wie man per REST eine JSON Liste abruft und darstellt. Nun wollte ich das erweitern und zusätzlich eine zweite Abfrage mache bei der ich keine Liste erhalte sondern ein einzelnes Objekt mit mehreren Attributen.
Allerdings habe ich wie gesagt keinen Plan davon und erst mal die Methode aus dem Tutorial kopiert, das ist die self.ajax. Weiter unten rufe ich dann nocheinmal self.ajax auf und bekomme das Ergebnis im data Objekt. Das enthält also mein JSON Objekt mit den ganzen Attributen. Nun möchte ich einen Teil der Attribute meinen Variablen zuweisen und diese dann als knockout observable deklarieren da diese weiter oben im HTML Code ein Data-Binding haben. Das funktioniert hier in dem Beispiel auch mit dem Namen aber die Punkte gehen nicht. Firebug zeigt mir dann an den Reference Error an und sagt das points nicht defined ist - name geht aber. Das verstehe ich nicht. Klar ich definier die Variable innerhalb einer Funktion aber solange ich nicht var davor schreibe, sollte die doch trotzdem global sein, oder? Und warum funktioniert name? Das kommt sonst auch nirgendwo anders vor.
Also Zeile 28 geht, Zeile 29 nicht mehr. Why?
Allerdings habe ich wie gesagt keinen Plan davon und erst mal die Methode aus dem Tutorial kopiert, das ist die self.ajax. Weiter unten rufe ich dann nocheinmal self.ajax auf und bekomme das Ergebnis im data Objekt. Das enthält also mein JSON Objekt mit den ganzen Attributen. Nun möchte ich einen Teil der Attribute meinen Variablen zuweisen und diese dann als knockout observable deklarieren da diese weiter oben im HTML Code ein Data-Binding haben. Das funktioniert hier in dem Beispiel auch mit dem Namen aber die Punkte gehen nicht. Firebug zeigt mir dann an den Reference Error an und sagt das points nicht defined ist - name geht aber. Das verstehe ich nicht. Klar ich definier die Variable innerhalb einer Funktion aber solange ich nicht var davor schreibe, sollte die doch trotzdem global sein, oder? Und warum funktioniert name? Das kommt sonst auch nirgendwo anders vor.
Code:
function PlayerViewModel() {
var self = this;
self.playerURI = 'http://localhost:5000/todo/api/v1.0/player';
self.username = "test";
self.password = "test";
self.ajax = function(uri, method, data) {
var request = {
url: uri,
type: method,
contentType: "application/json",
accepts: "application/json",
cache: false,
dataType: 'json',
data: JSON.stringify(data),
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization",
"Basic " + btoa(self.username + ":" + self.password));
},
error: function(jqXHR) {
console.log("ajax error " + jqXHR.status);
}
};
return $.ajax(request);
}
self.ajax(self.playerURI, 'GET').done(function(data) {
name = data.player.name
points = data.player.totalPropertyPoints
});
playername = ko.observable(name)
playerpoints = ko.observable(points)
Also Zeile 28 geht, Zeile 29 nicht mehr. Why?
Zuletzt bearbeitet: