1. ホーム
  2. javascript

[解決済み] jQueryなしで$httpでurlencodedフォームデータをPOSTするにはどうすればよいですか?

2022-04-15 10:12:31

質問

私はAngularJSの初心者ですが、手始めにAngularJSだけを使って新しいアプリケーションを開発しようと思っています。

サーバーサイドにAJAXで呼び出そうとしている。 $http をAngularアプリから実行します。

パラメータの送信は、以下を試してみました。

$http({
    method: "post",
    url: URL,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    data: $.param({username: $scope.userName, password: $scope.password})
}).success(function(result){
    console.log(result);
});

これは動作していますが、jQueryを同様に以下の場所で使用しています。 $.param . jQueryへの依存をなくすために、試してみました。

data: {username: $scope.userName, password: $scope.password}

が、これは失敗したようです。そこで params :

params: {username: $scope.userName, password: $scope.password}

が、これも失敗したようです。そこで JSON.stringify :

data: JSON.stringify({username: $scope.userName, password: $scope.password})

私の探求にこれらの可能な答えを見つけたが、失敗した。私は何か間違ったことをしているのでしょうか?AngularJSがこの機能を提供することは確かですが、どのように提供するのでしょうか?

解決方法は?

オブジェクトからJSON文字列に変換するのではなく、urlパラメータに変換する必要があるのではないでしょうか。

Ben Nadel氏のブログより .

デフォルトでは、$http サービスは、送信するリクエストを データをJSONとしてシリアライズし、content-を付けて投稿します。 タイプ、"application/json" を使用します。この値を FORM を投稿する場合、シリアライズアルゴリズムを変更し、データを投稿する必要があります。 で、content-type は "application/x-www-form-urlencoded" です。

ここから .

$http({
    method: 'POST',
    url: url,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    transformRequest: function(obj) {
        var str = [];
        for(var p in obj)
        str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
        return str.join("&");
    },
    data: {username: $scope.userName, password: $scope.password}
}).then(function () {});

アップデイト

AngularJS V1.4で追加された新サービスを利用するには