Javascript angular.js非获取实例操作返回错误:value.push不是函数
HTTP结果代码为200,并为$create返回正确的数据。 “on success”函数调用失败,错误如下:Javascript angular.js非获取实例操作返回错误:value.push不是函数,javascript,json,angularjs,Javascript,Json,Angularjs,HTTP结果代码为200,并为$create返回正确的数据。 “on success”函数调用失败,错误如下: var user = $resource('/user/:action',{},{ create: {method:'POST',isArray:true, params:{action:'save'}}, }); user.$create(function(userData) { //do something
var user = $resource('/user/:action',{},{
create: {method:'POST',isArray:true, params:{action:'save'}},
});
user.$create(function(userData) {
//do something
});
谢谢我也遇到了同样的问题,$resource对象在发出post请求时无法接受数组响应,或者这可能是一个bug。无论如何,我可以通过将服务器的数组响应转换为json响应来解决这个问题。因此,在您的情况下,服务器响应应该是这样的--> 您误用了:非GET类操作唯一需要的参数是
postData
对象。从文档中:
类对象或实例对象上的操作方法可以是
使用以下参数调用:
[……]
- 非获取“类”操作:
Resource.action([parameters]、postData、[success]、[error])
{ "response" : [{
"hashcode": "0",
"object-type": "aa",
}]}
将数据对象作为第一个参数传递,应该可以:
user.$create(function(userData) {
//do something
});
在使用instance post方法时,我遇到了同样的问题:
user.$create( {} , function(userData) {
//do something
});
但是,使用非基于实例的方法,post的结果将在数组中正确返回:
// Resource definition
var MyResource = $resource('/api/myresource/:id',
{ id: '@id' },
{ save: {method: 'POST', isArray: true} }
);
// ...
var myInstance = new MyResource();
myInstance.$save(attributes).then(...); // Expects result to be object
在哪里使用变量“value”?哪里都没有。我想这是AngularIs用户的错别字?顺便说一句,有趣的是,你问了一个关于value.push的问题,但你从来没有在代码中显示它。@Shomz是的,这是一个打字错误,是的,这很有趣-但它来自角度代码,而不是我的:-)这是一个类操作,不是实例操作。你是对的。我必须在服务器端重新实现这一点,这只是为了提高性能。真烦人。谢谢。@JRun我实际上使用了
transformResponse
字段将数组包装到一个对象中,并且不需要在服务器上更改任何内容。这对我来说很有效。在资源实例中使用$save时,我始终有一个“push”不是一个函数,好像它不理解http响应中的数组一样。使用非基于实例的方法也对我有效。那么,这种行为是一个bug还是设计意图?
user.$create( {} , function(userData) {
//do something
});
// Resource definition
var MyResource = $resource('/api/myresource/:id',
{ id: '@id' },
{ save: {method: 'POST', isArray: true} }
);
// ...
var myInstance = new MyResource();
myInstance.$save(attributes).then(...); // Expects result to be object
// Resource definition as above ...
MyResource.save(attributes).$promise.then(...); // Expects result to be array