0

我正在尝试让我的第一个 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');
  }]);

Get 是这样使用的。

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
}

谢谢

4

2 回答 2

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);

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

我怀疑该$save方法存在于资源对象上的唯一原因是可以将其附加到它在获取/查询请求期间带回的对象上。该文档$save仅在它被用于从请求返回的对象之一的上下文中提及。

例如:

var myRESTResourceEndPoint = $resource('/foo/:bar', {bar: null});
var foo = myRESTResourceEndPoint.get({bar: 123});

那么$save在这种情况下是有效的:

foo.$save();

在这种情况下assave是有效的:

myRESTResourceEndPoint.save();

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

foo.$save(foo);

或者

myRESTResourceEndPoint.$save(foo);
于 2016-04-15T12:37:24.843 回答
0
$scope.createTest = function () {
   var newTest = new Test;
   newTest.name = "new name";
   newTest.nume="123";

    newTest.$save();

};
于 2014-07-03T11:27:20.240 回答