为什么可以';我不能附加到我的JSON对象吗?(jQuery/Javascript)
我正在使用以下代码尝试向bar对象添加新属性:为什么可以';我不能附加到我的JSON对象吗?(jQuery/Javascript),javascript,jquery,json,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="
$(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的值/属性?您可以使用这个:
bar = $('form').serialize();
bar += '&foo=xyz';
console.log(bar);
当前,您正试图将
条
用作数组(或注释代码中的对象)。实际上生成一个URL ecoded字符串,这样您就可以简单地将您的值附加到该字符串中 bar
是序列化的表单数据。它是一个字符串而不是一个对象
如果要添加数据,则需要序列化该数据:
bar += "&" + encodeURIComponent('foo') + "=" + encodeURIComponent('xyz');
(如果您知道数据中没有URL特殊字符,则可以跳过编码URI组件)。更改为:
bar = $('form').serializeArray();
bar["foo"]='xyz';
这里的其他答案都是关于如何避免这种情况,但是没有人解释为什么会发生这种情况,所以我想我会试试看 以下是背景中发生的情况:
- 您可以调用
,它将生成一个字符串.serialize
- JavaScript中的字符串是基本值类型,因此当您向其添加属性时,“autobox”将成为该调用的
引用类型对象String
- 将属性指定给它,该属性将添加到已装箱的对象中
记录bar对象,该对象又是一个字符串,是一种基本值类型。因为toString是字符串类型,而且console.log(条)
是原语值类型,所以得到的初始值相同bar