2016-03-26 2 views
1

Dies ist mein 1. Mal mit AngulerJS. Ich versuche POST Daten an den Server.nicht in der Lage, richtige Daten mit AngularJS Post-Methode zu erhalten

AngularJS-Code

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; 
      }); 

}); 

Diese Codedaten auf dem Server veröffentlichen, aber mit etwas verdrahteten Format. Unten ist mein print_r($_POST); Ergebnis:

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

das falsche Ergebnis ist, erwarte ich so etwas wie

Array 
(
    user_id => 3 
) 

Hinweis: auf Server-Seite Ich benutze CodeIgniter Rahmen.

+1

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

+0

@MayankVadiya was ist, wenn ich mehrere Schlüssel senden möchte: value? und Dateien sowie – AkshayP

+0

als Sie '&' verwenden können. –

Antwort

0

Sie können Ihre Post-Daten in json senden:

$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; 
     }); 
}); 

Und in der Server-Seite können Sie die Post-Daten wie diese:

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

Sie Ihre Daten in der Post kodieren müssen body in urlencoded Format, wenn der Anfrage Inhaltstyp Anwendung/x-www-form-urlencoded` ist.

var inputs = 'student_id=3'; 
1

Obwohl es nicht die richtige Praxis ist die Antwort der alten Frage zu schreiben, aber ich will diese Antwort schreiben, damit andere Hilfe nehmen, wann immer sie benötigt: Welche so sein sollte.

Erstens, verstehen Sie den Grund, warum so etwas passiert. Der Grund ist, dass AngularJS die an die POST-Anfrage übergebenen Daten (Parameter) nicht serialisiert. Daher müssen wir die Daten mit $httpParamSerializerJQLike serialisieren, die als AngularJS Service verfügbar ist. Der Standard-Inhaltstyp der gebuchten Daten ist ebenfalls application/json. Daher müssen wir die Content-Type-Header der Post-Anfrage in application/x-www-form-urlencoded überschreiben, um über $ _POST auf die gebuchten Werte zugreifen zu können.

Jetzt in eckigen gibt es auch $httpParamSerializer Service, aber der Unterschied $httpParamSerializerJQLike ist etwas Objekt enthält auch ein anderes Objekt, wenn ehemalige verwendet wird, dann interne Objekt wird nicht serialisiert werden, dh alle verschachtelten Objekte werden nicht mit $httpParamSerializer aber serialisiert werden Bei $httpParamSerializerJQLike ist dies nicht der Fall.

Sie den Unterschied hier überprüfen: AngularJS $httpParamSerializer service DOC

Jetzt, anstatt json kodieren und dekodieren Daten in php, können wir in Angular JS selbst tun, indem Sie auf diese Weise $httpParamSerializerJQLike Dienst in Winkel JS mit:

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

Und in codeigniter Sie bekommen können, dass Daten, die von normalen Syntax dh geschrieben $this->input->post('user_id');

weitere Informationen ... Sie die oben l beziehen Tinte erwähnte ...

Hoffnung könnte es Ihnen helfen ....

Verwandte Themen