PHP에 대한 각도 HTTP 게시 및 정의되지 않음
PHPPHP에 대한 각도 HTTP 게시 및 정의되지 않음
ng-submit = "login () 태그가있는 양식이 있습니다.
이 함수는 자바 스크립트에서 잘 호출됩니다.
function LoginForm($scope, $http)
{
$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
$scope.email = "fsdg@sdf.com";
$scope.password = "1234";
$scope.login = function()
{
data = {
'email' : $scope.email,
'password' : $scope.password
};
$http.post('resources/curl.php', data)
.success(function(data, status, headers, config)
{
console.log(status + ' - ' + data);
})
.error(function(data, status, headers, config)
{
console.log('error');
});
}
}
PHP 파일에서 200 OK 응답을받습니다. 그러나 반환 된 데이터는 전자 메일과 암호가 정의되지 않았 음을 나타냅니다. 이것은 내가 가진 모든 PHP이다.
<?php
$email = $_POST['email'];
$pass = $_POST['password'];
echo $email;
?>
정의되지 않은 POST 값을 얻는 이유는 무엇입니까?
편집하다
나는 이것이 대중적인 질문 인 것처럼 보이기 때문에 지적하고 싶다. (아직 오래된 것이다.) .success와 .error는 더 이상 사용되지 않으며, @James Gentes가 commments에서 지적했듯이 사용해야한다.
해결법
-
==============================
1.angularjs .post ()는 Content-type 헤더를 application / json으로 기본 설정합니다. 이것을 폼 인코딩 된 데이터를 전달하기 위해 재정의하고 있지만 적절한 쿼리 문자열을 전달하기 위해 데이터 값을 변경하지 않으므로 PHP는 예상대로 $ _POST를 채우지 않습니다.
angularjs .post ()는 Content-type 헤더를 application / json으로 기본 설정합니다. 이것을 폼 인코딩 된 데이터를 전달하기 위해 재정의하고 있지만 적절한 쿼리 문자열을 전달하기 위해 데이터 값을 변경하지 않으므로 PHP는 예상대로 $ _POST를 채우지 않습니다.
내 제안은 헤더로 application / json의 기본 anglejs 설정을 사용하고 PHP에서 원시 입력을 읽은 다음 JSON을 deserialize하는 것입니다.
이것은 PHP에서 다음과 같이 구현할 수 있습니다.
$postdata = file_get_contents("php://input"); $request = json_decode($postdata); $email = $request->email; $pass = $request->password;
또는 $ _POST 기능에 크게 의존하는 경우 email=someemail@email.com 및 password = somepassword와 같은 쿼리 문자열을 만들어 데이터로 보낼 수 있습니다. 이 쿼리 문자열이 URL로 인코딩되었는지 확인하십시오. 수동으로 작성한 경우 (jQuery.serialize ()와 같은 것을 사용하는 것과는 대조적으로) Javascript의 encodeURIComponent ()가 트릭을 수행해야합니다.
-
==============================
2.나는 서버 쪽에서 init 파일을 시작할 때 매력을 느끼기 때문에 앵글 또는 기존 PHP 코드에서 아무 것도 할 필요가 없다.
나는 서버 쪽에서 init 파일을 시작할 때 매력을 느끼기 때문에 앵글 또는 기존 PHP 코드에서 아무 것도 할 필요가 없다.
if ($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST)) $_POST = json_decode(file_get_contents('php://input'), true);
-
==============================
3.API에서 나는 기본 컨트롤러를 가지고 있으며 __construct () 메서드 내부에 다음과 같은 것들이 있습니다.
API에서 나는 기본 컨트롤러를 가지고 있으며 __construct () 메서드 내부에 다음과 같은 것들이 있습니다.
if(isset($_SERVER["CONTENT_TYPE"]) && strpos($_SERVER["CONTENT_TYPE"], "application/json") !== false) { $_POST = array_merge($_POST, (array) json_decode(trim(file_get_contents('php://input')), true)); }
이를 통해 필요할 때 json 데이터를 $ _POST [ "var"]로 간단히 참조 할 수 있습니다. 훌륭하게 작동합니다.
그런 식으로 인증 된 사용자가 Content-Type : application / x-www-form-urlencoded 또는 Content-Type : application / json의 기본값으로 게시물 데이터를 보내는 jQuery 라이브러리에 연결하면 API가 오류없이 응답하고 API를 개발자에게 좀 더 친숙하게 만듭니다.
희망이 도움이됩니다.
-
==============================
4.PHP는 기본적으로 JSON 'application / json'을 허용하지 않기 때문에 API와 헤더를 매개 변수로 업데이트하여 API에서 직접 데이터를 사용할 수 있습니다.
PHP는 기본적으로 JSON 'application / json'을 허용하지 않기 때문에 API와 헤더를 매개 변수로 업데이트하여 API에서 직접 데이터를 사용할 수 있습니다.
첫째, 데이터 매개 변수화 :
data: $.param({ "foo": $scope.fooValue })
그런 다음 $ http에 다음을 추가하십시오.
headers: { 'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8' },
모든 요청이 PHP로 진행되는 경우 매개 변수는 다음과 같이 구성에서 전역 적으로 설정할 수 있습니다.
myApp.config(function($httpProvider) { $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; });
-
==============================
5.Angular Js 데모 코드 : -
Angular Js 데모 코드 : -
angular.module('ModuleName',[]).controller('main', ['$http', function($http){ var formData = { password: 'test pwd', email : 'test email' }; var postData = 'myData='+JSON.stringify(formData); $http({ method : 'POST', url : 'resources/curl.php', data: postData, headers : {'Content-Type': 'application/x-www-form-urlencoded'} }).success(function(res){ console.log(res); }).error(function(error){ console.log(error); }); }]);
서버 측 코드 : -
<?php // it will print whole json string, which you access after json_decocde in php $myData = json_decode($_POST['myData']); print_r($myData); ?>
각도 동작으로 인해 PHP 서버에서 일반적인 포스트 동작에 대한 직접적인 방법이 없으므로 json 객체에서이를 관리해야합니다.
-
==============================
6..post ()에 두 번째 매개 변수로 전달하기 전에 양식 데이터를 deserialize해야합니다. 이를 위해 jQuery의 $ .param (data) 메소드를 사용하면된다. 그러면 서버 측에서 $ .POST [ 'email'];를 참조 할 수 있습니다.
.post ()에 두 번째 매개 변수로 전달하기 전에 양식 데이터를 deserialize해야합니다. 이를 위해 jQuery의 $ .param (data) 메소드를 사용하면된다. 그러면 서버 측에서 $ .POST [ 'email'];를 참조 할 수 있습니다.
-
==============================
7.이것은 jQuery가 필요없고 JSON 디코드가 필요 없기 때문에 최고의 솔루션 (IMO)입니다.
이것은 jQuery가 필요없고 JSON 디코드가 필요 없기 때문에 최고의 솔루션 (IMO)입니다.
출처: https://wordpress.stackexchange.com/a/179373 및 : https://stackoverflow.com/a/1714899/196507
개요:
//Replacement of jQuery.param var serialize = function(obj, prefix) { var str = []; for(var p in obj) { if (obj.hasOwnProperty(p)) { var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p]; str.push(typeof v == "object" ? serialize(v, k) : encodeURIComponent(k) + "=" + encodeURIComponent(v)); } } return str.join("&"); }; //Your AngularJS application: var app = angular.module('foo', []); app.config(function ($httpProvider) { // send all requests payload as query string $httpProvider.defaults.transformRequest = function(data){ if (data === undefined) { return data; } return serialize(data); }; // set all post requests content type $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; });
예:
... var data = { id: 'some_id', name : 'some_name' }; $http.post(my_php_url,data).success(function(data){ // It works! }).error(function() { // :( });
PHP 코드 :
<?php $id = $_POST["id"]; ?>
-
==============================
8.오래된 질문이지만 Angular 1.4 $ httpParamSerializer가 추가되었고 $ http.post를 사용할 때 매개 변수를 전달하기 위해 $ httpParamSerializer (params)를 사용하면 모든 것이 일반적인 게시물 요청처럼 작동하고 JSON 역 직렬화는 없습니다. 서버 측에서 필요합니다.
오래된 질문이지만 Angular 1.4 $ httpParamSerializer가 추가되었고 $ http.post를 사용할 때 매개 변수를 전달하기 위해 $ httpParamSerializer (params)를 사용하면 모든 것이 일반적인 게시물 요청처럼 작동하고 JSON 역 직렬화는 없습니다. 서버 측에서 필요합니다.
https://docs.angularjs.org/api/ng/service/$httpParamSerializer
-
==============================
9.Angular와 PHP로 작업하는 동안 그것을 이해하는 데 몇 시간이 걸렸습니다. $ _POST에서 POST 데이터가 PHP로 전송되지 않았습니다.
Angular와 PHP로 작업하는 동안 그것을 이해하는 데 몇 시간이 걸렸습니다. $ _POST에서 POST 데이터가 PHP로 전송되지 않았습니다.
PHP 코드에서 다음을 수행하십시오. - $ angular_post_params 변수를 만듭니다. - 다음과 같이하십시오. $ angular_http_params = (배열) json_decode (trim (file_get_contents ( 'php : // input'))));
이제 $ _POST에서와 같이 매개 변수에 액세스 할 수 있습니다.
$ angular http params [ "key"]
혹시 자바 스크립트에 대해 궁금해하신다면 ....
var myApp = angular.module('appUsers', []); //var post_params = $.param({ request_type: "getListOfUsersWithRolesInfo" }); var dataObj = { task_to_perform: 'getListOfUsersWithRolesInfo' }; myApp.controller('ctrlListOfUsers', function ($scope, $http) { $http({ method: 'POST', dataType: 'json', url: ajax_processor_url, headers: { 'Content-Type': 'application/json' }, data: dataObj, //transformRequest: function(){}, timeout: 30000, cache: false }). success(function (rsp) { console.log("success"); console.log(rsp); }). error(function (rsp) { console.log("error"); }); });
from https://stackoverflow.com/questions/15485354/angular-http-post-to-php-and-undefined by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
왜 PHP는 문자열을 0으로 간주합니까? (0) | 2018.09.06 |
---|---|
PHP에서 수레 비교 (0) | 2018.09.06 |
파일을 다운로드하지 않고 원격 파일 크기 (0) | 2018.09.06 |
MySQL과 NoSQL : 올바른 것을 선택하도록 도와주세요. (0) | 2018.09.06 |
PHP는 어디에서 에러 로그를 저장합니까? (php5, apache, fastcgi, cpanel) (0) | 2018.09.06 |