我正在使用角度(1.0.8)提交有效载荷,并且它没有提交我所有的json。这是我把问题归结为angular.toJson()。
angular.toJson(
{"yt$location": {
"$t": "US"
}
});
// "{"yt$location":{}}"
// I would like it should return
// "{"yt$location":{ "$t": "US" }}"
JSON.stringify({"yt$location": {
"$t": "US"
}});
// "{"yt$location":{"$t":"US"}}"
angular.toJson({"$t":"what"}); // "{}"
答案 0 :(得分:5)
在文档(http://code.angularjs.org/1.0.8/docs/api/angular.toJson)中,angular.toJson
会忽略以 $ 开头的所有属性。这种情况会发生在很多角度方法中(例如angular.equals
),因为它会在整个地方使用 $ 来为它添加到数据中的任何属性添加前缀。
例如,从$http
获取JSON对象将添加一些额外的属性来检查数据是否已解析等。angular.toJson
将忽略这些并按预期序列化您的数据。 / p>
更直接地回答您的问题:
angular.toJson
似乎与您的示例完全一致。尝试避免使用包含以 $ 开头的属性的数据,如果您确实必须尝试序列化对象而不使用angular.toJson
,而是在支持它的浏览器中使用JSON.toStringify
我认为$http
方法都接受字符串有效负载以及对象,所以如果你正在使用它,你可以自己执行序列化。我没有对此进行测试,但$http
代码使用toJson
转换对象有效负载,但会直接传递字符串。