programing

PHP에 대한 AngularJS HTTP 게시 및 정의되지 않음

newsource 2022. 10. 6. 22:01

PHP에 대한 AngularJS HTTP 게시 및 정의되지 않음

태그가 있는 양식을 가지고 있습니다.ng-submit="login()

javascript에서는 fine이라고 하는 함수입니다.

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 200 OK, PHP 200 OK, PHP 200 OK, PHP の の 음음 음음 。email ★★★★★★★★★★★★★★★★★」password정의되어 있지 않습니다.입니다.

<?php
$email = $_POST['email'];
$pass  = $_POST['password'];
echo $email;
?>

내가 ?POST★★★★★★★★★★★★★★★★★?

편집

인 것 하고 싶습니다..success ★★★★★★★★★★★★★★★★★」.error 이상 되지 않습니다. 꼭 하세요..then@@James Gentes에서 와 같이

angularjs.post()는 "Content-type" 입니다.application/json. 폼된 데이터를 전달하기 , 을data문자열을 하기 위한 는 PHP를 않습니다.$_POST예상하신 대로입니다.

angularjs를 사용하는 것이 .application/jsonraw PHP raw JSON 。

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()도움이 될 거야

저는 서버 측에서 init 파일의 선두에서 작업을 하고 있습니다.마법처럼 동작합니다.각진 코드나 기존의 php 코드로 아무것도 할 필요가 없습니다.

if ($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST))
    $_POST = json_decode(file_get_contents('php://input'), true);

개발 중인 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를 보다 쉽게 개발할 수 있습니다.

이게 도움이 됐으면 좋겠다.

PHP는 으로 JSON PHP를 않기 에 JSON은 JSON을 지원하지 .'application/json'한 가지 방법은 angular에서 헤더와 파라미터를 업데이트하여 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';
});

각도 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 개체로 관리해야 합니다.

양식 데이터를 .post()에 두 번째 매개 변수로 전달하기 전에 직렬화를 해제해야 합니다.이를 위해서는 jQuery의 $.param(데이터) 메서드를 사용합니다.그러면 서버 측에서 $처럼 참조할 수 있습니다.POST ['이메일'];

이는 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"];
?>

오래된 질문이지만 Angular 1.4에 $httpParamSerializer가 추가되어 $http를 사용할 때 언급할 필요가 있습니다.post, $httpParamSerializer(params)를 사용하여 파라미터를 전달하면 모든 것이 일반 포스트 요구와 동일하게 동작하며 서버 측에서 JSON 역직렬화가 필요하지 않습니다.

https://docs.angularjs.org/api/ng/service/$httpParamSerializer

Angular와 PHP를 사용하는 동안 그것을 이해하는 데 몇 시간이 걸렸습니다.POST 데이터가 $_POST에서 PHP로 전송되지 않았습니다.

PHP 코드에서 다음을 수행합니다. - 변수 $angular_post_params를 만듭니다. - 그런 다음 다음을 수행합니다.$angular_http_params = (array)json_decode(trim(file_get_contents('php://input')));

$_POST에서와 같이 파라미터에 액세스 할 수 있게 되었습니다.

$angular_http_params["key"]

javascript에 대해 궁금하실까봐...이것은 내가 사용한 것이다.

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

언급URL : https://stackoverflow.com/questions/15485354/angularjs-http-post-to-php-and-undefined