[解決済み] AngularJs $http.post() でデータが送信されない
質問
以下の文で、指定したurlに投稿データが送られないのはなぜか、どなたか教えてください。urlは呼び出されますが、サーバー上で$_POSTを表示すると - 空の配列が表示されます。データに追加する前にコンソールにメッセージを表示すると、正しいコンテンツが表示されます。
$http.post('request-url', { 'message' : message });
データを文字列にした状態でも試してみました(結果は同じです)。
$http.post('request-url', "message=" + message);
以下のような形式で使用すると、うまくいくようです。
$http({
method: 'POST',
url: 'request-url',
data: "message=" + message,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
とありますが、$http.post()で行う方法はあるのでしょうか?また、動作させるためには、必ずヘッダーを含めなければならないのでしょうか?上記のコンテンツタイプは送信データの形式を指定していると思うのですが、javascriptのオブジェクトとして送信することは可能でしょうか?
解決方法は?
asp.net MVCを使用していて、同じ問題が発生しました。 解決策はこちら
<ブロッククオート
を初めて使う人の中には、多くの混乱があります。
AngularJS
なぜ
$http
サービスのショートハンドレッド関数 (
$http.post()
など)はないようです。
と入れ替え可能です。
jQuery
に相当するもの(
jQuery.post()
など)
その違いは、どのように jQuery と アンギュラーJS をシリアライズして送信します。根本的には、あなたの選んだサーバー言語がAngularJSの送信をネイティブに理解できないことに問題があるのです ... デフォルトでは jQuery を使用してデータを送信します。
Content-Type: x-www-form-urlencoded
と、おなじみの
foo=bar&baz=moe
をシリアライズしています。
アンギュラーJS しかし、データ転送には
Content-Type: application/json
と
{ "foo": "bar", "baz": "moe" }
JSONシリアライゼーションは、残念ながら一部のWebサーバー言語では 特に PHP -はネイティブにアンシリアライズしない。
魅力的に動作します。
CODE
// Your app's root module...
angular.module('MyModule', [], function($httpProvider) {
// Use x-www-form-urlencoded Content-Type
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
/**
* The workhorse; converts an object to x-www-form-urlencoded serialization.
* @param {Object} obj
* @return {String}
*/
var param = function(obj) {
var query = '', name, value, fullSubName, subName, subValue, innerObj, i;
for(name in obj) {
value = obj[name];
if(value instanceof Array) {
for(i=0; i<value.length; ++i) {
subValue = value[i];
fullSubName = name + '[' + i + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += param(innerObj) + '&';
}
}
else if(value instanceof Object) {
for(subName in value) {
subValue = value[subName];
fullSubName = name + '[' + subName + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += param(innerObj) + '&';
}
}
else if(value !== undefined && value !== null)
query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
}
return query.length ? query.substr(0, query.length - 1) : query;
};
// Override $http service's default transformRequest
$httpProvider.defaults.transformRequest = [function(data) {
return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
}];
});
関連
-
[解決済み] Angular 1.2+ で ng-bind-html-unsafe を複製するために $sce.trustAsHtml(string) を使用するにはどうしたらよいですか?
-
[解決済み] ReferenceError: Angularは定義されていません。
-
[解決済み] エラーです。10回の$digest()反復に達しました。動的なsortby述語で中断!?
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] AngularJSで$scope.$watchと$scope.$applyを使用するにはどうすればよいですか?
-
[解決済み] HTTPSヘッダーは暗号化されていますか?
-
[解決済み] AngularJS で $http.get リクエストにデータを渡す
-
[解決済み] application/x-www-form-urlencoded or multipart/form-data?
-
[解決済み】リクエストヘッダーフィールドのAccess-Control-Allow-Headersが許可されない。
-
[解決済み] AngularJS - $http.postがJSONの代わりにリクエストパラメータを送信する方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】typeerrorは、未定義のプロパティ'data'を読み取ることができません。
-
[解決済み] AngularJSで$httpリクエスト中にスピナーGIFを表示する?
-
[解決済み] プリフライト応答が成功しない
-
[解決済み] data-ng-file-selectが動作しないのはなぜですか?
-
[解決済み] AngularJSでkeypressイベントを使用するには?
-
[解決済み] AngularJS 。scope.apply()呼び出し時の$digest already in progressエラーを防ぐ。
-
[解決済み] ServiceとFactoryで迷う
-
[解決済み] データをリクエストペイロードではなく、フォームデータとして投稿するにはどうすればよいですか?
-
[解決済み] jQueryなしで$httpでurlencodedフォームデータをPOSTするにはどうすればよいですか?
-
[解決済み] AngularJS - $http.postがJSONの代わりにリクエストパラメータを送信する方法はありますか?