2014-01-29 71 views
1


您好!
我使用AngularJS開發了一個RESTful webapp,我使用ngResource模塊發送http請求。 Web服務是用FuelPHP開發的。發佈數據 - ngResource AngularJS

我在使用ngResource$save方法創建資源時遇到問題。我的網絡服務不接收發布數據。

當我用Firebug檢查http請求時,我可以看到帖子數據。

我不明白爲什麼發佈的數據沒有被web服務接收。所以如果你有一個想法,幫助我會很酷。

對不起,我的英語水平很差。

下面是代碼:

Service : 
app.factory('Medication', ['$resource', 'global', function ($resource, global) { 
    return $resource(global.API+'/medication/medication', {}, {}) 
}]) 

Method in the controller : 
$scope.addMedication = function() { 
    var newMed = new Medication(); 
    newMed.name = 'nameValue'; 
    newMed.increaseinr = 1; 
    newMed.details = 'detailsValue'; 
    newMed.$save(); 
} 

回答

1

我相信這是如何的問題PHP正在處理POST。當使用AngularJS $資源時,它將使用JSON作爲帖子的BODY POST對象。 PHP不會將其視爲常規參數。我不得不爲此在其他PHP(從未使用過的燃料)

$requestBody = file_get_contents('php://input'); 
$requestBody = json_decode($requestBody, true); 

那麼你應該能夠檢查$ requestBody作爲一個正常的JSON對象。

0

您需要配置的$保存法的請求方法「POST」

+0

我認爲保存方法的默認類型是POST。 無論如何,我試過了,它不起作用。 app.factory( '藥物',[ '$資源', '全球',函數($資源,全球){ \t回$資源(global.API + '/藥物/藥物', \t \t {}, \t \t {「save」:{method:「POST」}} \t) }]) – GuillaumeP

0

感謝您的回答。
的確,數據發佈在請求的正文中。
使用FuelPHP,我使用Input :: json('key')來獲取值(而不是Input:post('key'))

0

您可以設置$ http的默認選項'transformRequest'來更改崗位數據的轉移形成。

var myApp = angular.module('myApp'); 

myApp.config(function ($httpProvider) { 
    $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"; 
    $httpProvider.defaults.transformRequest = function(data){ 
     if (data === undefined) { 
      return data; 
     } 
     return $.param(data); 
    } 
});