为什么我不能附加到我的JSON对象? (jQuery的/ JavaScript)的

时间:2013-05-23 10:42:51

标签: javascript jquery json

我正在使用以下代码尝试向bar对象添加新属性:

$(document).ready(function(){
    $('form').on("submit",preventDefault);
});

function preventDefault(e) {
    e.preventDefault();
    $url="contact/send";
    bar = $('form').serialize();
    bar["foo"]='xyz';
    //bar.foo="123";
    console.log(bar);
}

但是我似乎没有得到bar.foo的价值。如果我在Chrome中查看控制台,我总会得到与此类似的结果:

name=Grahame&email=foo%40bar.com&message=Hello.

为什么我没有得到foo的值/属性?

4 个答案:

答案 0 :(得分:1)

其他答案在这里谈论如何解决这个问题,但没有人在解释为什么这种情况正在发生,所以我想我会试一试。

以下是后台发生的事情:

  • 您调用生成字符串的.serialize

  • JavaScript中的字符串是原始值类型,因此当您向其添加属性时,“autoboxes”将成为该调用的String 引用类型对象

  • 您将属性分配给它,该属性将添加到装箱对象

  • console.log(bar);记录bar对象,该对象已经是一个原始值类型的字符串。因为String类型的toString,并且因为bar是原始值类型,所以你得到相同的初始值。

您可以在the secret life of primitives in JavaScript.the specification

中详细了解相关信息

如何解决

How to add a value to jQuery serialize。那已经回答了。

答案 1 :(得分:0)

你可以使用它:

bar = $('form').serialize();
bar += '&foo=xyz';
console.log(bar);

目前,您尝试将bar用作数组(或注释代码中的对象)。 .serialize()实际上会生成一个URL编码字符串,因此您只需将值附加到其中即可。

答案 2 :(得分:0)

bar序列化表单数据。它是字符串而不是对象。

如果要添加数据,则需要序列化该数据:

bar += "&" + encodeURIComponent('foo') + "=" + encodeURIComponent('xyz');

(如果您知道数据中没有网址特殊字符,则可以跳过编码URI组件。)

答案 3 :(得分:0)

更改为:

bar = $('form').serializeArray();
bar["foo"]='xyz';