AngularJS $ http.post不发送数据

时间:2016-06-07 14:12:12

标签: angularjs laravel http-post

我对AngularJS和Laravel 5.2感到沮丧。

我想用:

执行正常的$ http帖子请求
APIservice.saveArticle = function ( oArticle, callback )
{
   var message = 'Hello World!';
   $http({
          method: 'POST',
          url: sBaseUrl + '/api/dummy/',
          headers: {'Content-Type': 'application/x-www-form-urlencoded'},
          data: $.param({ 'message' : message })
   });
}

如果我现在尝试在邮递员中调用此路由(POST + URL / api / admin),我可以在选项卡标题下看到内容类型是text / html。

所以我编辑了模块配置:

artikelportal.config(
[
    '$httpProvider',
    function( $httpProvider )
    {
        $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8'; 
    }
]);

这仍然行不通。我的后端控制器也没有数据:

Route::post('api/dummy',
function ( Request $request )
{
    var_dump(json_decode(file_get_contents('php://input'), true)); // NULL 
    var_dump($_POST); // EMPTY
}
);

我做错了什么?我已经尝试了很多,但我从来没有这样做......有人知道这是什么问题吗?

1 个答案:

答案 0 :(得分:2)

Postman是一名休息客户。您需要设置请求标头Content-type:application / x-www-form-urlencoded,以便将带有此标头的请求发送到服务器。如果您未在请求中设置任何标头,Postman会发送默认标头Content-type:text / html。这个例子适用于我的locahost。

测试so.html

<!DOCTYPE html>
<html ng-app="myApp">
    <head>
        <title>Test Angular POST request</title>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
        <script src="app.js"></script>
    </head>
    <body ng-controller="testCtrl">
        <p>Press button and get response from the server</p>
        <button ng-click="callServer()">Call</button>
        <p><strong>Response:</strong></p>
        <p>{{htmlResponse}}</p>
    </body>
</html>

app.js

'use strict'
var appModule = angular.module('myApp',[]).service('testService',['$http',function($http){
       this.getResponse = function (){
           return $http({
                url: "api-post.php",
                method: "POST",
                data: "p1=first_parameter&p2=second_parameter",
                headers: {                    
                    "Content-Type": "application/x-www-form-urlencoded"
                }
            });
       } 
}]).controller('testCtrl',['$scope','testService',function($scope,testService){
    $scope.callServer = function(){
       testService.getResponse().then(function(response){
        $scope.htmlResponse = response.data;
    }); 
    };

}]);

API-post.php中

<?php
echo "This text come from the server. You sent to me this:";
print_r($_POST);
?>

如果单击该按钮,结果为: enter image description here

您可以在图片中的Chrome检查器工具中查看请求和响应。 这个例子适用于我当地的环境。 如果客户端和服务器位于不同的域中,则存在安全限制(请参阅CORS)。