如何从角度前端向laravel API发送请求?

时间:2016-02-18 19:02:32

标签: php angularjs api laravel-5.2

我正在使用Laravel 5.2构建RESTful API,并且我有一个AngularJS 1.5前端。我正在成功地编写服务以获取信息,但是当我将其传递给API时,我正在为数据库添加或发布任何内容。我尝试过进行一些搜索,但我不知道如何实际保存我发送API的数据。这是我到目前为止的尝试:

- 来自工厂的服务 -

addReceipt: function(request) { 
            return $http.post(api_url + "/rewards/receipts/add", request).then(function(results) {
              console.log(results);
              return results.data;
            });
        }

- 从控制器

$scope.submitReceipt = function() {
                rewardsFactory.addReceipt($scope.model).then(function() {
                    console.log($scope.model);
                    toaster.pop({ type: 'success', title: 'Claim Submitted!', body: "Thanks! We'll take a look at your claim shortly.", showCloseButton: true });
                });
            };

- 从Laravel API路线

Route::post('rewards/receipts/add', 'Rewards\RewardsController@addReceipt');

- 从Laravel控制器

public function addReceipt(Request $request)
    {
        //Add the Receipt
        DB::table('receipts')->insert(
            ['transaction_id' => $request->input('transactionID'), 
             'client_id' => $request->input('client_id'), 
             'location_id' => $request->input('location_id') ]
        );
    }

My Current Cors设置似乎对于至少一些流量来说效果不错,所以我不认为这是问题,但我还是不确定我做错了什么。

1 个答案:

答案 0 :(得分:1)

请注意,$http默认情况下不会发送表单编码数据,而是在请求正文中发送application/json

我不会使用laravel进行任何工作,但是如果你检查$_POST,你会看到它是空的,所以$request->input也可能是空的。

在php中,您可以使用以下方式访问响应正文:

json_decode(file_get_contents('php://input')[,true/*optional to convert to array*/])

我相信json_decode($request->getContent())会在laravel中做同样的事情

另一种方法是使用以下$http设置从文档中发送表单编码数据

.controller(function($http, $httpParamSerializerJQLike) {
  //...

  $http({
    url: myUrl,
    method: 'POST',
    data: $httpParamSerializerJQLike(myData),
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  });

});

您还可以在运行块中设置$http.defaults,以便将所有帖子或结果发送为x-www-form-urlencoded,而不必为每次使用添加配置