Endless Storm
Commander
- Registriert
- Dez. 2008
- Beiträge
- 2.154
Hallo zusammen,
ich habe mal wieder eine Frage, und zwar geht es um das Auslesen von einer MongoDB mit PHP um sie dann an AngularJS zu übergeben. Die Daten liegen in der MongoDB wie folgt vor (Kopie aus dem cmd-Fenster):
Außer ingredients sind alle Daten eindimensional. ingredients selbst kann ein, oder unbestimmt viele Inhalte haben.
Die Daten müssen dabei wie folgt übertragen werden (der Übersichtlichkeit in eigene Zeilen gesetzt):
Frage 1: Wie müssen die Klammern von ingredients gesetzt werden, damit sie in JavaScript auch als Array im Array erkannt werden? Sind die so korrekt?
Frage 2: Wie löse ich das Auslesen vom §result in PHP?
Die Ausgabe der find.php erzeugt im Browser folgende Ausgabe für zwei vorliegende Treffer (etwas formatiert):
... zu früh versand...
Wenn ich auf die PHP zugreife, bekomme ich auch oben genannten Code zurück. Kann diese aber nicht weiterverarbeiten.
Post: {"userId":"100"}
Antwort: [{"_id": "58849f88310af72fa3c67305", "userid": "100", "recipename": "Spaghettis", "persons": "2", "preparationTime"
: "40", "ingredients": "{{"amount": "150", "unit": "Gramm", "ingredient": "Spaghetti"},{"amount": "200"
, "unit": "Milliliter", "ingredient": "Soße"}},"preparation": "Spaghettis kochen, Soße erhitzen. Hei
ß servieren."},{"_id": "58849fdc310af72fa3c67306", "userid": "100", "recipename": "Tee", "persons": "1"
, "preparationTime": "8", "ingredients": "{{"amount": "230", "unit": "Milliliter", "ingredient": "Wasser"
}},"preparation": "Teewasser erhitzen, Teebeutel rein und 8 Minuten ziehen lassen."}]
Ich erhalte aber auch einen "TypeError: dbg is undefined" in Firebug...
Ausschnitte aus AngularJS:
Das setzen der UserId klappt. das finddata() funktioniert jedoch irgendwie nicht...
ich habe mal wieder eine Frage, und zwar geht es um das Auslesen von einer MongoDB mit PHP um sie dann an AngularJS zu übergeben. Die Daten liegen in der MongoDB wie folgt vor (Kopie aus dem cmd-Fenster):
Code:
{
"_id" : ObjectId("58849e19310af72fa3c67304"),
"userid" : "100",
"recipename" : "Spaghettis",
"persons" : "2",
"preparationTime" : "40",
"ingredients" : [
{
"amount" : "150",
"unit" : "Gramm",
"ingredient" : "Spaghetti"
},
{
"amount" : "200",
"unit" : "Milliliter",
"ingredient" : "Soße"
}
],
"preparation" : "Spaghettis kochen, Soße erhitzen. Heiß servieren."
}
Außer ingredients sind alle Daten eindimensional. ingredients selbst kann ein, oder unbestimmt viele Inhalte haben.
Die Daten müssen dabei wie folgt übertragen werden (der Übersichtlichkeit in eigene Zeilen gesetzt):
Code:
[{"_id": "58849f88310af72fa3c67305",
"userid": "100",
"recipename": "Spaghettis",
"persons": "2",
"preparationTime": "40",
"ingredients": [{
"amount": "1500",
"unit": "Gramm",
"ingredient": "Spaghetti"},
{"amount": "200",
"unit": "Milliliter",
"ingredient": "Soße"}]
"preparation": "Spaghettis kochen, Soße erhitzen. Heiß servieren."
}]
Frage 1: Wie müssen die Klammern von ingredients gesetzt werden, damit sie in JavaScript auch als Array im Array erkannt werden? Sind die so korrekt?
Frage 2: Wie löse ich das Auslesen vom §result in PHP?
PHP:
// dummy for testing
$userid = '100';
// add all request-objects to array
$query = array(
'userid' => $userid
);
$result = $collection->find($query);
if ($collection->count($query)) {
$data = '';
foreach ($result as $entry) {
// $send[] = add following values to the array
$send = $send.
'{"_id": "'.$entry['_id'].'", '.
'"userid": "'.$entry['userid'].'", '.
'"recipename": "'.$entry['recipename'].'", '.
'"persons": "'.$entry['persons'].'", '.
'"preparationTime": "'.$entry['preparationTime'].'", '.
'"ingredients": "[';
foreach ($entry['ingredients'] as $property) {
$data = $data.
'{"amount": "'.$property['amount'].'", '.
'"unit": "'.$property['unit'].'", '.
'"ingredient": "'.$property['ingredient'].'"},';
}
$data = substr($data, 0, -1);
$send = $send.$data.
'],"preparation": "'.$entry['preparation'].'"},';
$data = '';
}
// kill the last comma
$send = substr($send, 0, -1);
$send = '['.$send.']';
} else {
$send = null;
}
print_r($send);
Die Ausgabe der find.php erzeugt im Browser folgende Ausgabe für zwei vorliegende Treffer (etwas formatiert):
Code:
[
{"_id": "58849f88310af72fa3c67305", "userid": "100", "recipename": "Spaghettis", "persons": "2", "preparationTime": "40",
"ingredients": "[
{"amount": "150", "unit": "Gramm", "ingredient": "Spaghetti"},
{"amount": "200", "unit": "Milliliter", "ingredient": "Soße"}
],"preparation": "Spaghettis kochen, Soße erhitzen. Heiß servieren."},
{"_id": "58849fdc310af72fa3c67306", "userid": "100", "recipename": "Tee", "persons": "1", "preparationTime": "8",
"ingredients": "[
{"amount": "230", "unit": "Milliliter", "ingredient": "Wasser"}
],"preparation": "Teewasser erhitzen, Teebeutel rein und 8 Minuten ziehen lassen."}]
... zu früh versand...
Wenn ich auf die PHP zugreife, bekomme ich auch oben genannten Code zurück. Kann diese aber nicht weiterverarbeiten.
Post: {"userId":"100"}
Antwort: [{"_id": "58849f88310af72fa3c67305", "userid": "100", "recipename": "Spaghettis", "persons": "2", "preparationTime"
: "40", "ingredients": "{{"amount": "150", "unit": "Gramm", "ingredient": "Spaghetti"},{"amount": "200"
, "unit": "Milliliter", "ingredient": "Soße"}},"preparation": "Spaghettis kochen, Soße erhitzen. Hei
ß servieren."},{"_id": "58849fdc310af72fa3c67306", "userid": "100", "recipename": "Tee", "persons": "1"
, "preparationTime": "8", "ingredients": "{{"amount": "230", "unit": "Milliliter", "ingredient": "Wasser"
}},"preparation": "Teewasser erhitzen, Teebeutel rein und 8 Minuten ziehen lassen."}]
Ich erhalte aber auch einen "TypeError: dbg is undefined" in Firebug...
Ausschnitte aus AngularJS:
Code:
var userId = '';
$scope.finddata=function() {
userId = userFactory.getUserId();
console.log('finddata, getUserId:');
console.log(userId);
$http.post('http://localhost/rezept/find.php', {
'userId': userId
})
.then(function(data){
console.log('finddata, erhaltene Daten:');
console.log(data);
console.log(data.data);
$scope.recipes = data.data;
});
};
factory.factory('userFactory', function() {
var userId = '';
var userType = '';
var item = {};
return {
getUserId: function() {
return userId;
},
getUserType: function() {
return userType;
},
setUser: function(data, data2) {
if (data !== '') {
userId = data;
userType = data2;
console.log('userId gesetzt: '+userId + ', userType gesetzt: ' +userType);
} else {
return null;
}
}
};
});
Das setzen der UserId klappt. das finddata() funktioniert jedoch irgendwie nicht...
Zuletzt bearbeitet: