在发布jQuery时,JavaScript数组被编码

时间:2014-02-07 00:07:25

标签: javascript jquery ajax knockout.js

我正在尝试使用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

3 个答案:

答案 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) {

感谢大家的帮助!