2 votes

$http.post ne fonctionne pas avec des données JSON

Je construis une application en utilisant AngularJS et j'ai un formulaire de connexion à partir duquel je veux envoyer JSON comme corps de la demande.

Dans mon contrôleur ;

$scope.credentials = {userid: $scope.userid, password: $scope.password};
$scope.login = function () {
$http({
                method : 'POST',
                url    : 'http://localhost/login.json',
                data   : $scope.credentials,
                headers: {'Content-Type': 'application/json'}
            }).success(function (data) {
                // code
            }).error(function (data, status, headers, config) {
            $scope.status = status + ' ' + headers;
            console.log($scope.status);
        });
};

Mais lorsque je soumets le formulaire, la requête POST ne s'exécute pas et j'obtiens un message dans la console comme suit ;

0 function (name) {
"use strict";

    if (!headersObj) headersObj =  parseHeaders(headers);

    if (name) {
      return headersObj[lowercase(name)] || null;
    }

    return headersObj;
  }

Qu'est-ce que je fais de mal ici ?

Si je changeais la ligne

headers: {'Content-Type': 'application/json'}

à

headers: {'Content-Type': 'application/x-www-form-urlencoded'}

la demande POST est faite. Mais je ne veux pas l'envoyer sous forme de valeurs de formulaire, je veux plutôt envoyer la requête en JSON.

0voto

Sergey Stolyarov Points 1388

Vous devez encoder l'objet javascript en données de type mime correspondantes afin d'afficher les données. Si vous utilisez jQuery, essayez d'utiliser $.param($scope.credentials) au lieu de seulement $scope.credentials .

0voto

Je pense que le problème est que vous POST pour http://localhost/login.json qui n'est pas un script qui est capable de recevoir POST avec les données du formulaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X