如何将AngularJS$资源中的参数序列化为rails 3.2兼容的参数
我正在尝试获取angular资源,以便将我的对象正确序列化为rails 3.2控制器操作。数据格式为JSON,工作输入和所需输入(在Rails端)应为:如何将AngularJS$资源中的参数序列化为rails 3.2兼容的参数,angularjs,ruby-on-rails-3.2,Angularjs,Ruby On Rails 3.2,我正在尝试获取angular资源,以便将我的对象正确序列化为rails 3.2控制器操作。数据格式为JSON,工作输入和所需输入(在Rails端)应为: "data"=>[{"id"=>29, "column"=>0, "position"=>0}], "id"=>"2", "page"=>{} 这适用于我们的旧代码: $.ajax type: "put" url: target dataType: "json" contentType: "
"data"=>[{"id"=>29, "column"=>0, "position"=>0}], "id"=>"2", "page"=>{}
这适用于我们的旧代码:
$.ajax
type: "put"
url: target
dataType: "json"
contentType: "application/json"
data: JSON.stringify({data: widgets})
但是,如果我尝试使用角度资源,我会得到如下结果:
"data"=>"[{\"id\":28,\"column\":2,\"position\":0}]", "id"=>"2", "page"=>{"id"=>"2"}
我首先创建了一个工厂:
app.factory "Page", ["$resource", ($resource) ->
$resource "/admin/pages/:collectionRoute:id/:memberRoute",
{
id: "@id",
memberRoute: "@memberRoute",
collectionRoute: "@collectionRoute",
},
{
update: {method: "PUT"}
store_widgets: { method: "PUT", params: { data: "@data", memberRoute: 'store_widgets' }, isArray: true }
}
]
。。。并使用以下命令调用store\u widgets
函数:
Page.store_widgets(id: $scope.page_id, data: JSON.stringify(widgets) )
我尝试了几种设置数据参数的方法,但似乎不起作用。它要么作为[Object Object]
发布,要么作为普通字符串发布
关于如何使$resource发送的请求与使用纯jQuery Ajax的请求完全相同,有什么建议吗?这取决于您是否希望在请求正文或查询参数中传递
数据:
// 'store_widgets' action definition
store_widgets: {
method: "PUT",
params: {
id: "@id",
data: "@data",
memberRoute: 'store_widgets'
},
isArray: true
}
在查询参数中:
// 'store_widgets' action definition
store_widgets: {
method: "PUT",
params: {
id: "@id",
data: "@data",
memberRoute: 'store_widgets'
},
isArray: true
}
电话:
在请求机构中:
电话:
Ass$资源文档说:
可以使用以下参数调用类对象或实例对象上的操作方法:
HTTP获取“类”操作:Resource.action([parameters]、[success]、[error])
非获取“类”操作:Resource.action([parameters]、postData、[success]、[error])
非获取实例操作:实例.$action([参数],[成功],[错误])
唯一能够解决序列化参数问题的方法是使用JQuery.param(),以便在PHP POST通道中查看数据
我必须在$resource中设置标题:
headers : {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
我对$resource方法的调用。
这又快又脏,请原谅
vm.save = function(item) {
var data = $.param({username:item.username, email:item.email});
userFactory.save(data);
}
我不得不从item
中提取数据,因为$resource将方法附加到item
。如果在项
上使用$.param
,它将触发所有的删除、获取、查询等操作。。附加到资源的方法。此问题在angular的2.0版本中得到解决(
请看这里:这是我的想法,但没有发生序列化。我作为数据发送的任何内容:都只是转换为字符串。可能使用toString()
,如果您查看控制台(在运行我的plunker时),输出将变成{“id”=>“2”,“data”=>“[object object]”,“page”=>{}
您将看到数据已正确序列化。也许您可以设置自己的plunker,重现该问题。否则将很难调试此问题。您是对的,对此表示抱歉。应该立即执行此操作。请稍后回来。我发现了问题。出于某种原因,param:{data:@data}
似乎将我的对象转换为字符串。如果我删除该对象,它将被序列化。对此有何想法?
vm.save = function(item) {
var data = $.param({username:item.username, email:item.email});
userFactory.save(data);
}