Jestem nowy na scenie i chcę użyć Angular.js do utworzenia żądania HTTP POST. Mam dostęp do skryptów PHP, które mają parametry, które są po prostu zmiennymi POST. To, co jest zwracane z każdego skryptu, jest łańcuchem JSON. Zazwyczaj w postaci HTML można zrobić taką prośbę jak:HTTP POST przy użyciu Angular.js
<form method="post" action="url.php">
<input name="this">
<input name="that">
<input value="Submit">
</form>
zależności od wejścia, a po kliknięciu przedstawienia, JSON dane1 powróci coś takiego: { "code" : 1 }
nie mam dostępu do skryptów lub do serwerów, które je hostują.
Zastanawiam się, czy Angular.js może odczytać dane JSON1, dopasować dane1 do tego, co zdefiniowano w moich danych JSON2, a następnie wypisać je do mojego widoku (<pre>data2</pre>
).
Na przykład, jeśli { "code" : 1 }
jest pobierany, chcę mój JSON do wyprowadzania wartości dla kodu # 1:
{ "code" : [
{ 1: "User already logged in." },
{ 2: "Wrong parameters, try again."},
{ 3: "etc., etc." }
]
};
Oto moja próba:
<form ng-controller="PhpCtrl" name="f1">
<input type="text" name="name">
<input type="text" name="password">
<pre ng-model="codeStatus">{{codeStatus}}</pre>
<input type="submit" ng-click="add()" value="Submit">
</form>
function PhpCtrl($scope, $http, $templateCache) {
$scope.method = 'POST';
$scope.url = 'url.php';
$scope.codeStatus = "";
$scope.add = function() {
$http({
method: $scope.method,
url: $scope.url,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
cache: $templateCache
}).
success(function(response) {
$scope.codeStatus = response.data;
}).
error(function(response) {
$scope.codeStatus = response || "Request failed";
});
return false;
};
}
Wszystko to delegowania tak daleko na view to "Żądanie nie powiodło się" lol, mimo że przetwarza HTTP/1.1 200. Wiem, że nadal mam sposoby, aby przejść, ale byłbym wdzięczny za każdą pomoc. Kiedy wymyślę, jak opublikować odpowiednie dane JSON1 w widoku, następnym krokiem jest dopasowanie i wyprowadzenie odpowiednich danych2. Z góry dziękuję!
Być może żądanie nie powiedzie się, ponieważ wykonujesz prośbę o wpis bez sensu ding danych z nim, spróbuj umieścić wszystkie pola formularza w obiekcie FormData i wysłać go z żądaniem, dodając tę 'dane: FormData' jako argument do żądania $ http po umieszczeniu w nim wszystkich pól formularza lub nagłówków nie ma poprawny. Mam nadzieję, że to pomoże. –
Dziękuję za odpowiedź. Nie jestem pewien, czy robię to dobrze, ale czy po prostu zawijam dane formularza w FormData jako "obiekt JSON"? Próbowałem tego http://pastebin.com/QMZSr4AZ i wciąż przetwarzałem błąd "Żądanie nie powiodło się", więc domyślam się, że nadal nie wysłałem danych. – matenji
2 rzeczy: 1) Nie powinieneś ustawiać tych wartości na $ scope, $ scope jest przeznaczone do wiązania modelu, a wszystkie wartości na nim są obserwowane, a ich wartości są stosowane do pól o tej samej nazwie, które mają wpływ na wydajność. Po prostu ustaw je jako zmienne lokalne, takie jak var method = 'POST', będą używane w funkcji http jako część Zamknięcia. 2) Czy wiesz, jak dostać się do debuggera JS w Chrome/Firefox? Użyj tego do sprawdzenia odpowiedzi. W prawym górnym rogu Chrome> Narzędzia programisty, potrzebujesz karty Sieć i Konsoli, jeśli dodasz debuggera; linia do funkcji błędu. –