Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular ng资源POST发送的查询参数不是JSON_Javascript_Angularjs_Ngresource - Fatal编程技术网

Javascript Angular ng资源POST发送的查询参数不是JSON

Javascript Angular ng资源POST发送的查询参数不是JSON,javascript,angularjs,ngresource,Javascript,Angularjs,Ngresource,我正在尝试让我的第一个ng资源示例正常工作。问题是它将数据作为查询参数而不是JSON发送 我将此服务用于我的REST资源。REST\u URL\u前缀只是一个常量 angular.module('myApp') .service('Test', ['$resource', 'REST_URL_PREFIX', function Test($resource, URL_PREFIX) { return $resource(URL_PREFIX + 'test/:id'); }])

我正在尝试让我的第一个ng资源示例正常工作。问题是它将数据作为查询参数而不是JSON发送

我将此服务用于我的REST资源。REST\u URL\u前缀只是一个常量

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  
我想让它这样称呼:

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
}

谢谢

原始海报有以下代码:

var obj = {name: 'Test', num: 12345};
var objRest = new Test();
objRest.$save(obj);
然而,从被接受的答案和我的帖子中,什么是不明显的,因此我试图澄清这一点。$save函数直接用于$resource服务。在这段代码的上下文中,
newtest()
将创建angular resource类的实例,该类用于进行RESTful调用

应该使用的功能是
save
功能,而不是
$save

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

var obj = {name: 'Test', num: 12345};
var objRest = new Test();
objRest.save(obj);
区别非常细微,但这意味着POST调用是使用查询参数而不是http请求体中的JSON进行的

我怀疑
$save
方法存在于资源对象上的唯一原因是它可以将其附加到它在get/query请求期间带回的对象上。在请求返回的一个对象上使用它的上下文中,只提到了
$save

例如:

var myRESTResourceEndPoint = $resource('/foo/:bar', {bar: null});
var foo = myRESTResourceEndPoint.get({bar: 123});
然后,
$save
在此上下文中有效:

foo.$save();
myRESTResourceEndPoint.save();
其中as
save
在此上下文中有效:

foo.$save();
myRESTResourceEndPoint.save();
出现混淆的原因是以下代码将产生结果,但不是预期的结果:

foo.$save(foo);


@西尔维斯特:请详细说明你的答案,解释代码的作用以及它是如何解决问题的,以帮助其他看到它的人。@Sylvester这是有效的。然后我在我的控制器中以$scope.newTest的形式尝试了它,这也很有效。当我在newTest上添加使用ng模型的输入时,我得到了错误newTest。$save不是一个函数。这有意义吗?或者我应该在问题中添加代码吗?我刚刚试过。我以前尝试过的主要区别是是否在新操作符中使用括号。例如,新测试()或新测试。无论哪种情况,我都会得到同样的错误。test.$save()不是函数。如果我在该函数中创建一个新测试并手动复制属性,那么它就可以工作。如果我使用angular.copy,那么它不会。你能为你的控制器创建jsbin或plunkr吗?我可以帮助你。我只是尝试了一个plunkr,但无法让它给我相同的错误。它给出了一个关于$injector的不同错误。这是使用jsbin中的代码。对不起(