我正在将以下帖子发送到我的服务器,
$.ajax({
url: url,
data: JSON.stringify({ SecretKey: e.Code, CommentId: e.Id, Direction: direction, VoteType:1}),
type: "POST",
contentType: "application/json;charset=utf-8",
});
请求发布时,如下所示:
{"Direction":{"Id":1,"Code":"1234-5678-9012","Description":"This is 1 comment."},"VoteType":"1"}
为什么Direction
包裹元素?注意VoteType
不受影响? VoteType
与其他变量之间的唯一区别是VoteType
是一个文字值 - 而不是引用对象。
完整型号,万一有帮助:
var model = {
Id: ko.observable(0),
Code: ko.observable(""),
Description: ko.observable(""),
Comments: ko.observableArray(),
vote: function (e, direction) {
$.ajax({
url: url,
data: { SecretKey: e.Code, CommentId: e.Id, Direction: direction, VoteType:1},
type: "POST",
contentType: "application/json;charset=utf-8",
});
},
secretVote: function (e, direction) {
$.ajax({
url: url,
data: { SecretKey: e.Code, Direction: direction, VoteType:0},
type: "POST",
contentType: "application/json;charset=utf-8",
});
},
comment: sendComment
}
答案 0 :(得分:1)
当您致电JSON.stringify
时,它会尝试序列化所有内容。 description
(由键Description
标识)指向具有内部属性的复杂对象,因此JSON.stringify
会将其序列化为JSON。 VoteType
是一个密钥,因此将序列化为VoteType
。
另外,您没有看到SecretKey
和CommentId
的原因是它们是undefined
,因此不会被JSON.stringify
序列化。
总而言之,这与键的值有关,而不是键本身。在第一种情况下,Direction
引用复杂对象,而在第二种情况下VoteType
引用整数。
另一方面,您无需使用JSON.stringify
序列化数据; jQuery会为你做到这一点。
答案 1 :(得分:0)
此:
JSON.stringify({SecretKey:e.Code,CommentId:e.Id,Direction:direction,VoteType:1})
可以屈服:
{“Direction”:{“Id”:1,“Code”:“1234-5678-9012”,“Description”:“这是1条评论。”},“VoteType”:“1”}
如果您的e.Code
和e.Id
未定义(SecretKey
且CommentId
字段已删除)且direction
对象为:
{“Id”:1,“Code”:“1234-5678-9012”,“Description”:“这是1条评论。”}``