我正在尝试使用jQuery.Ajax将部分Knockout视图模型发布到我们的服务器。 当我构建数据对象时,它在控制台中看起来很好,但是当它通过jQuery Ajax Post发送时,其中的数组被编码。另一端的结果可以被服务器读取,所以它可以工作,但是它让我很烦恼(有效载荷更大)。 这是代码:
var items = $.map(self.Items(), function (item) {
return item.Key() ? {
Key: item.Key(),
PromoCode: item.PromoCode,
Qty: parseInt(item.Qty(), 10)
} : undefined;
}),
data = {
"InEditMode": true,
"Items": items
};
$.ajax({
url: '/api/order/',
type: 'POST',
data: data,
dataType: "json",
success: function (order) {
<snip>
FireBug看到的结果就是这个。 这是解码的JSON对象
InEditMode true
Items[0][Key] 2730M0ARAX1111AAAAX0
Items[0][PromoCode]
Items[0][Qty] 3
Items[1][Key] 2730M0ARCX1111AAAAX0
Items[1][PromoCode]
Items[1][Qty] 5
这是Raw视图 InEditMode =真安培; 项%5B0%5D%5BKey%5D = 2730M0ARAX1111AAAAX0&安培; 项%5B0%5D%5BPromoCode%5D =安培; 项%5B0%5D%5BQty%5D = 3及 项%5B1%5D%5BKey%5D = 2730M0ARCX1111AAAAX0&安培; 项%5B1%5D%5BPromoCode%5D =安培; 项%5B1%5D%5BQty%5D = 5
答案 0 :(得分:1)
就像@codenoire在评论中所说,你没有指定内容类型。将contentType: 'application/json; charset=utf-8'
添加到$.ajax
来电,如下所示:
$.ajax({
url: '/api/order/',
type: 'POST',
data: data,
dataType: "json",
contentType: 'application/json; charset=utf-8',
success: function (order) {
<snip>
答案 1 :(得分:1)
我认为您需要在发布之前对JSON对象进行字符串化。在发布之前使用JSON.stringify(data)
。
答案 2 :(得分:0)
我太近了!答案是rwisch45和Saeedses的结合
我之前已经尝试过添加contentType,但是这导致它破坏了,我没有再追求它了。
解决方案是添加内容类型AND JSON.stringify,如此。
$.ajax({
url: '/api/order/',
type: 'POST',
data: JSON.stringify(data),
dataType: "json",
contentType: 'application/json; charset=utf-8',
success: function (order) {
感谢大家的帮助!