web-dev-qa-db-ja.com

AngularJS-$ http.postはJSONとしてデータを送信します

アンギュラーjsでオートコンプリートディレクティブに取り組んでいますが、いくつかの問題があります。

オートコンプリートの入力があるフォームがあります。そこで何かを入力すると、term variableがJSONとして送信されます:

enter image description here

しかし、別の形式で同じ関数(異なるangularコントローラーから、しかし同じ関数)を使用すると、term variableが完全に送信され、オートコンプリートは正常に動作します。

enter image description here

これが私のangular関数です:

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

何が間違っていると思いますか?

40

JSON.stringify()を使用して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

$ http.postにヘッダーを明示的に設定することを検討してください(アプリケーションの2つのバージョンのどちらが機能するかわからないのでapplication/jsonを配置しますが、次の場合はapplication/x-www-form-urlencodedを使用できますもう1つです):

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

私が最も適切な方法は、同じコードを使用することだと思いますangularを使用して「get」リクエストを行うときに$httpParamSerializerをコントローラーにインジェクトする必要があるので、次のことを単純に行うことができますJqueryを使用する、$http.post(url,$httpParamSerializer({param:val}))

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