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/json
raw 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
'programing' 카테고리의 다른 글
이벤트 대상을 클릭하면 상위 요소가 아닌 요소 또는 하위 요소가 표시됩니다. (0) | 2022.10.06 |
---|---|
JavaScript와 ECMAScript의 차이점은 무엇입니까? (0) | 2022.10.06 |
일반 Python 목록에 비해 NumPy의 장점은 무엇입니까? (0) | 2022.10.06 |
두 좌표 사이의 거리를 계산하는 함수 (0) | 2022.10.06 |
Java / Android - 전체 스택 트레이스를 인쇄하는 방법 (0) | 2022.10.06 |