2016-03-26 24 views
1

これはAngulerJSで初めてのことです。私はサーバーにPOSTデータをしようとしています。AngularJSのポストメソッドで適切なデータを取得できません

AngularJSコード

var app = angular.module("myApp", []); 
var BASE_URL = "http://localhost/project/api/Data/"; 

var GET_DATA = BASE_URL+"get_data"; 
console.log(GET_DATA); 
app.controller('myCtrl', function($scope, $http) { 
var inputs = { "user_id": "3"}; 
var config = { 
       headers : { 
        'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;' 
       } 
      } 
$http.post(GET_DATA , inputs, config) 
      .success(function (response, status, headers, config) { 
       $scope.content = response.error; 
       $scope.statuscode = response.status; 
       $scope.statustext = response.statusInfo; 
       console.log(response);  
      }) 
      .error(function (data, status, header, config) { 
       $scope.ResponseDetails = "Data: " + data + 
        "<hr />status: " + status + 
        "<hr />headers: " + header + 
        "<hr />config: " + config; 
      }); 

}); 

このコードは、サーバーにデータを投稿、何か有線形式とされます。以下は私のprint_r($_POST);結果である:

Array 
(
    [{"user_id":"3"}] => 
    [0] => 
) 

が、これは間違った結果であり、私が何か

Array 
(
    user_id => 3 
) 

のような注意を期待しています:私は、サーバー側でCodeIgniterのフレームワークを使用しています。

+1

'var inputs =" user_id = 3 ";' –

+0

@MayankVadiya複数のkey:valueを送信したいのですが?あなたは '&'を使うことができるよりも – AkshayP

+0

であることに注意してください。 –

答えて

0

あなたはjsonであなたのPOSTデータを送信することができます

$http.post(GET_DATA , {"user_id": "3"}) 
     .success(function (response, status, headers, config) { 
      $scope.content = response.error; 
      $scope.statuscode = response.status; 
      $scope.statustext = response.statusInfo; 
      console.log(response);  
     }) 
     .error(function (data, status, header, config) { 
      $scope.ResponseDetails = "Data: " + data + 
      "<hr />status: " + status + 
      "<hr />headers: " + header + 
      "<hr />config: " + config; 
     }); 
}); 
をサーバ側では、あなたがこのようなポストデータを取得することができます。

$postdata = json_decode(file_get_contents('php://input')); 
print_r($postdata); 

あなたはポストにあなたのデータをエンコードする必要があります要求コンテンツタイプがapplication/x-www-form-urlencodedの場合、urlencodedフォーマットの本文です。これは、次のようにする必要があります:昔の質問の答えを書くための権利の練習ではありませんが、私は、彼らが必要な時はいつでも他の人が助けを借りることができるように、この答えを投稿したいけど

var inputs = 'student_id=3'; 
1

まず、そのようなことが起こっている理由を理解します。理由は、AngularJSは自動的にPOSTリクエストに渡されるデータ(パラメータ)をシリアル化しないからです。したがって、AngularJSサービスとして利用可能な$httpParamSerializerJQLikeでデータをシリアル化する必要があります。また、投稿されたデータのデフォルトのコンテンツタイプはapplication/jsonです。したがって、$ _POST経由で投稿された値にアクセスするには、投稿リクエストのContent-typeヘッダをapplication/x-www-form-urlencodedに上書きする必要があります。

は今の角度でも$httpParamSerializerサービスが、違い$httpParamSerializerJQLikeが提供され、前者は使用されているので、もし何かのオブジェクトは、別のオブジェクトを含む、内部オブジェクトは、すべてのネストされたオブジェクトが$httpParamSerializerでシリアライズされることはありませんつまり、シリアル化されることはありませんされているが、 $httpParamSerializerJQLikeではそうではありません。

あなたがここでの違いをチェックすることができます

phpjsonエンコードとデコードデータではなく、今AngularJS $httpParamSerializer service DOC

を、我々は行うことができます角度JS自体では、このように角度JSで$httpParamSerializerJQLikeサービスを使用して:

$http({ 
     url: myUrl, //post your url here 
     method: 'POST', 
     data: $httpParamSerializerJQLike({ 'user_id': '3'}), 
     headers: { 
     'Content-Type': 'application/x-www-form-urlencoded' 
     } 
     }); 

そして、CodeIgniterの中であなたはより多くの情報については、通常の構文すなわち$this->input->post('user_id');

によるデータを掲載することができます...あなたは上記のLを参照することができます言及されたインク...

あなたに役立つかもしれない....

関連する問題