web-dev-qa-db-fra.com

AngularJS - $ http.post envoie des données en json

Je travaille sur la directive autocomplete avec angularjs mais avec quelques problèmes.

J'ai un formulaire qui a une entrée autocomplete. Lorsque je tape quelque chose ici, la variable de terme est envoyée au format JSON:

enter image description here

Mais, quand j'utilise la même fonction (de différente angular, mais la même fonction) sous une autre forme, la variable de terme envoyé parfaitement et la saisie semi-automatique fonctionne bien:

enter image description here

Voici ma angular:

$scope.getCustomers = function (searchString) {
    return $http.post("/customer/data/autocomplete",
        {term: searchString})
        .then(function (response) {
            return response;
        });
};

Qu'est-ce qui ne va pas selon vous?

40
Jhonatan Sandoval

Utilisez JSON.stringify () pour envelopper votre json

var parameter = JSON.stringify({type:"user", username:user_email, password:user_password});
    $http.post(url, parameter).
    success(function(data, status, headers, config) {
        // this callback will be called asynchronously
        // when the response is available
        console.log(data);
      }).
      error(function(data, status, headers, config) {
        // called asynchronously if an error occurs
        // or server returns response with an error status.
      });
44
Swapnil Dalvi

Envisagez de définir explicitement l'en-tête dans $ http.post (je mets application/json, car je ne suis pas sûr de savoir laquelle des deux versions de votre exemple est la version de travail, mais vous pouvez utiliser application/x-www-form-urlencoded si c'est l'autre):

$http.post("/customer/data/autocomplete", {term: searchString}, {headers: {'Content-Type': 'application/json'} })
        .then(function (response) {
            return response;
        });
15
Adrian B.

je pense que le moyen le plus approprié est d’utiliser le même morceau de code angular utilisé lors d’une requête "get" avec vous $httpParamSerializer devra l’injecter dans votre contrôleur pour que vous pouvez simplement faire ce qui suit sans avoir à utiliser Jquery du tout, $http.post(url,$httpParamSerializer({param:val}))

app.controller('ctrl',function($scope,$http,$httpParamSerializer){
  $http.post(url,$httpParamSerializer({param:val,secondParam:secondVal}));
}
12
oneLeggedChicken