Angular ng-resource POST发送查询参数不是JSON

时间:2014-07-03 10:49:37

标签: javascript angularjs ngresource

我正在努力让我的第一个ng-resource示例正常工作。问题是它将数据作为查询参数而不是JSON发送。

我为我的REST资源提供此服务。 REST_URL_PREFIX只是一个常量。

angular.module('myApp')
  .service('Test', ['$resource', 'REST_URL_PREFIX', function Test($resource, URL_PREFIX) {
     return $resource(URL_PREFIX + 'test/:id');
  }]);

像这样使用。

var obj = {name: 'Test', num: 12345};
var objRest = new Test();
objRest.$save(obj);

我可以在控制台中看到它调用这样的Web服务:

POST http://server/rest/test?name=Test&num=12345 

我想要的是这样打电话:

POST http://server/rest/test  

但是请求正文中有JSON。

{name: 'Test', num: 12345}

请求的内容类型是application / json,所以我认为它会发送JSON吗?

我错过了什么吗?我确实花了很长时间搜索,有很多类似的问题,但没有解决我的问题。

修改
最后,我希望从表格中提交详细信息。

$scope.submit = function(test) {
  > Code to save test parameter using Test resource required here
}

由于

2 个答案:

答案 0 :(得分:2)

原始海报有以下代码:

var obj = {name: 'Test', num: 12345};
var objRest = new Test();
objRest.$save(obj);

然而,从接受的答案中得到的并不是很明显,因此我的帖子试图澄清这一点。是$ save函数直接在$ resource服务上使用。在此代码的上下文中,new Test()将创建角度资源类的实例,该实例用于进行RESTful调用。

应该使用的函数是save函数而不是$save

以下代码是@Ben Thurley应该使用的代码:

var obj = {name: 'Test', num: 12345};
var objRest = new Test();
objRest.save(obj);

区别非常微妙,但意味着在http请求正文中使用查询参数而不是JSON进行POST调用。

我怀疑资源对象上存在$save方法的唯一原因是,它可以将它附加到它在get / query请求期间带回的对象。 documentation仅在从请求返回的其中一个对象上使用$save时提及var myRESTResourceEndPoint = $resource('/foo/:bar', {bar: null}); var foo = myRESTResourceEndPoint.get({bar: 123});

例如:

$save

然后foo.$save(); 在此上下文中有效:

save

myRESTResourceEndPoint.save(); 在此上下文中的有效位置:

foo.$save(foo);

发生混淆是因为以下代码将产生结果,但不会产生预期的方式:

myRESTResourceEndPoint.$save(foo);

{{1}}

答案 1 :(得分:0)

$scope.createTest = function () {
   var newTest = new Test;
   newTest.name = "new name";
   newTest.nume="123";

    newTest.$save();

};