Sono nuovo alla scena e voglio utilizzare Angular.js per fare una richiesta HTTP POST. Sto accedendo agli script PHP che hanno parametri che sono solo variabili POST. Ciò che viene restituito da ogni script è una stringa JSON. Normalmente in un modulo HTML è possibile effettuare una richiesta in tal senso come:HTTP POST utilizzando Angular.js
<form method="post" action="url.php">
<input name="this">
<input name="that">
<input value="Submit">
</form>
A seconda del vostro ingresso e dopo aver fatto clic Invia, JSON data1 tornerà qualcosa di simile: { "code" : 1 }
non ho accesso agli script o ai server che li ospitano.
Mi chiedevo se per Angular.js è possibile leggere i dati JSON1, abbinare i dati1 a quelli che sono definiti nei miei dati JSON2 e quindi inviarli alla mia vista (<pre>data2</pre>
).
Per esempio, se { "code" : 1 }
viene recuperato, voglio che il mio JSON per emettere il valore per il codice # 1:
{ "code" : [
{ 1: "User already logged in." },
{ 2: "Wrong parameters, try again."},
{ 3: "etc., etc." }
]
};
Ecco il mio tentativo:
<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;
};
}
Tutto è distacco fino ad ora per la la vista è "Richiesta non riuscita" lol, sebbene stia elaborando HTTP/1.1 200. So che ho ancora un modo per andare ma apprezzerei qualsiasi aiuto. Una volta capito come inviare i dati JSON corretti1 alla vista, il passo successivo è la corrispondenza e l'output dei dati appropriati2. Grazie in anticipo!
Forse la richiesta fallisce perché stai facendo una richiesta di posta senza dati con esso, prova a mettere tutti i campi modulo in un oggetto FormData e inviarlo con la richiesta aggiungendo questo 'data: FormData' come argomento alla richiesta $ http dopo aver inserito tutto il campo modulo o le intestazioni non corretta. Spero che questo aiuto. –
Grazie per la risposta. Non sono sicuro se lo sto facendo bene, ma faccio semplicemente a capo dei dati del modulo in FormData come un 'oggetto JSON'? Ho provato questo http://pastebin.com/QMZSr4AZ e stava ancora elaborando l'errore "Richiesta non riuscita", quindi suppongo di non aver ancora inviato i dati. – matenji
2 cose: 1) Non dovresti impostare questi valori su $ scope, $ scope è inteso per l'associazione modello e tutti i valori su di esso sono Osservati e i loro valori applicati a campi con lo stesso nome, che ha un impatto sulle prestazioni. Impostali come variabili locali come var method = 'POST', saranno usati nella funzione http come parte di una chiusura. 2) Sai come entrare nel debugger JS in Chrome/Firefox? Usalo per ispezionare la risposta. In Chrome in alto a destra> Strumenti per sviluppatori, desideri la scheda Rete e Console se aggiungi un debugger; linea per la funzione di errore. –