AngularJS + PHPред $ Http рд╕реЗрд╡рд╛ рдХреЛ jQuery.ajax рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ ()

$http.post() рдореЗрдВ рд╢реБрд░реБрдЖрддреА рдЕрдХреНрд╕рд░ рднреНрд░рдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ $ http рд╕реЗрд╡рд╛ (рдЬреИрд╕реЗ $http.post() ) рдХреЗ рдлрд╛рд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕, рд╕рдорд╛рди Jquery рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдЬреИрд╕реЗ jQuery.post() ) рдХреЗ рд╕рд╛рде рд╡рд┐рдирд┐рдореЗрдп рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдореИрдиреБрдЕрд▓ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдЗрд╕ рд╕реЗ рдкрд╣рд▓реЗ Gickery рдореЗрдВ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 (function($) { jQuery.post('/endpoint', { foo: 'bar' }).success(function(response) { // ... }); })(jQuery); 

рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдореНрди рдХреЛрдгреАрдп рдореЗрдВ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛:

 var MainCtrl = function($scope, $http) { $http.post('/endpoint', { foo: 'bar' }).success(function(response) { // ... }); }; 

рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рдХреЛрдгреАрдп рдЕрдиреБрд░реЛрдз рд╕реЗ { foo: 'bar' } рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред

рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЬрд┐рдХрд░реА рдФрд░ рдХреЛрдгреАрдп рдХреНрд░рдордмрджреНрдз рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЕрд╕рд▓ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдЙрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЬреЛ рдмрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХреЛрдгреАрдп рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ - рд▓рд╛рдирдд рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдгреАрдп, рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Gickery Content-Type: x-www-form-urlencoded рдФрд░ рдкрд░рд┐рдЪрд┐рдд рдкрдВрдХреНрддрд┐ foo=bar&baz=moe рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреЛрдгреАрдп, рд╣рд╛рд▓рд╛рдВрдХрд┐, Content-Type: application/json рдФрд░ { "foo": "bar", "baz": "moe" } рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ Content-Type: application/json JSON рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЬреЛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреБрдЫ рд╕рд░реНрд╡рд░ рднрд╛рд╖рд╛рдУрдВ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ PHP - рд╢реБрд░реВ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рд╡рд╕реНрддреБ рдореЗрдВ рдмрджрд▓рдирд╛ред

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Angular Developers рдиреЗ рд╣рдорд╛рд░реЗ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП x-www-form-urlencoded рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП $ http рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрд╛ред рдлрд╝реЛрд░рдо рдФрд░ рд╕реНрдЯреИрдХрдСрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рдХрдИ рд╕рдорд╛рдзрд╛рди рдкреЗрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд░ рдХреЛрдб рдпрд╛ $ http рдиреАрддрд┐ рдпреЛрдЬрдирд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ $ http рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдХреБрдЫ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИ:

 //    ... angular.module('MyModule', [], function($httpProvider) { //  x-www-form-urlencoded Content-Type $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8'; //   transformRequest  $http- $httpProvider.defaults.transformRequest = [function(data) { /** *  ;    x-www-form-urlencoded . * @param {Object} obj * @return {String} */ var param = function(obj) { var query = ''; var name, value, fullSubName, subValue, innerObj, i; for(name in obj) { value = obj[name]; if(value instanceof Array) { for(i=0; i<value.length; ++i) { subValue = value[i]; fullSubName = name + '[' + i + ']'; innerObj = {}; innerObj[fullSubName] = subValue; query += param(innerObj) + '&'; } } else if(value instanceof Object) { for(subName in value) { subValue = value[subName]; fullSubName = name + '[' + subName + ']'; innerObj = {}; innerObj[fullSubName] = subValue; query += param(innerObj) + '&'; } } else if(value !== undefined && value !== null) { query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&'; } } return query.length ? query.substr(0, query.length - 1) : query; }; return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data; }]; }); 

рдиреЛрдЯ: рдКрдкрд░ рджрд┐рдП рдЧрдП рдмрдбрд╝реЗ рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рд╣рдореЗрд╢рд╛ param() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп jQuery.param() рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ рдЬрдм рдЖрдк jQuery.param() рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП $ рд╕рдВрд╕рд╛рдзрди рд╡рд░реНрдЧ рдХреЗ рд╣рд░ рддрд░реАрдХреЗ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрдВрдЧреЗ, рддреЛ рдЖрдк рдХреЛрдгреАрдп рдХреЗ $ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдЕрд░рд╛рдЬрдХрддрд╛ рдкреИрджрд╛ рд╣реЛрдЧреА! (рдпрд╣ jQuery рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдВрдЧреБрд▓рд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЖрдорддреМрд░ рдкрд░ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЯреА рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред .Dред)

рдмрд╕ рдКрдкрд░ рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛!

рдЕрдм рд╣рдо $http.post() рдФрд░ рдЕрдиреНрдп рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдореМрдЬреВрджрд╛ рд╕рд░реНрд╡рд░ рдХреЛрдб x-www-form-urlencoded рдбреЗрдЯрд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рд╣рд░ рд░реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ, рдкреВрд░рд╛ рдХреЛрдб (рдЖрдк рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдкрдиреЗ рджреЗрдЦрддреЗ рд╣реИрдВ) рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

HTML рдЯреЗрдореНрдкрд▓реЗрдЯ
 <div ng-app="MyModule" ng-controller="MainCtrl"> <p ng-show="loading">Loading...</p> <p ng-hide="loading">Response: {{response}}</p> </div> 

рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб (AngularJS)
 var MainCtrl = function($scope, $http) { $scope.loading = true; $http.post('/endpoint', { foo: 'bar' }).success(function(response) { $scope.response = response; $scope.loading = false; }); }; 

рд╕рд░реНрд╡рд░ рдХреЛрдб (PHP)
 < ? header('Content-Type: application/json'); // -! $_POST  ; PHP   //      echo json_encode($_POST); ?> 

рдЕрдиреНрдп рдиреЛрдЯ
рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдм рднреА PHP рдореЗрдВ Angular's JSON рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдкрдврд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдареАрдХ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрджрд┐ рдЖрдк PHP рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ JSON рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рддреЗ рд╣реИрдВ:

 < ? $params = json_decode(file_get_contents('php://input')); //  ,     PHP  (. ) $params = json_decode(trim(file_get_contents('php://input')), true); ?> 

рд╕реНрдкрд╖реНрдЯ рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдереЛрдбрд╝рд╛ рдХрдо рд╕рд╣рдЬ рд╣реИ (рд╣рдо рд╕рднреА рдХреЗ рдмрд╛рдж $ _POST рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ), рдФрд░ рдпрджрд┐ рд╕рд░реНрд╡рд░ рд╣реИрдВрдбрд▓рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА $ _POST рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдПрдХ рдЕрдЪреНрдЫреА рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдВрднрд╡рддрдГ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЗрдирдкреБрдЯ рд╣реИрдВрдбрд▓рд░ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ JSON рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХреЗ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВред

рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, Content-Type: application/json рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЬреЛ рдЕрдзрд┐рдХ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рдЖрд▓реЗрдЦ рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╕рд░реНрд╡рд░ рдкрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Additiveред рдирд░реНрд╡ рд╕реЗ рд╕рдкреНрд▓реАрдореЗрдВрдЯ

 'use strict'; (function() { angular.extend( angular, { toParam: toParam }); /** *  ,      , *       url *   [url]http://api.jquery.com/jQuery.param/[/url] *  [url]http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object/1714899#1714899[/url] * * @param object * @param [prefix] * @returns {string} */ function toParam( object, prefix ) { var stack = []; var value; var key; for( key in object ) { value = object[ key ]; key = prefix ? prefix + '[' + key + ']' : key; if ( value === null ) { value = encodeURIComponent( key ) + '='; } else if ( typeof( value ) !== 'object' ) { value = encodeURIComponent( key ) + '=' + encodeURIComponent( value ); } else { value = toParam( value, key ); } stack.push( value ); } return stack.join( '&' ); } }()); 


 'use strict'; // change default settings var app = angular.module( 'app', [ ... ]); app .config( function( $httpProvider ) { // [url]http://habrahabr.ru/post/181009/[/url] $httpProvider.defaults.headers.post[ 'Content-Type' ] = 'application/x-www-form-urlencoded;charset=utf-8'; $httpProvider.defaults.transformRequest = function( data ) { return angular.isObject( data ) && String( data ) !== '[object File]' ? angular.toParam( data ) : data; }; }); 

Source: https://habr.com/ru/post/In181009/


All Articles