Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';我不能附加到我的JSON对象吗?(jQuery/Javascript)_Javascript_Jquery_Json - Fatal编程技术网

为什么可以';我不能附加到我的JSON对象吗?(jQuery/Javascript)

为什么可以';我不能附加到我的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="

我正在使用以下代码尝试向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的值/属性?

您可以使用这个:

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
    引用类型对象

  • 将属性指定给它,该属性将添加到已装箱的对象中

  • console.log(条)
    记录bar对象,该对象又是一个字符串,是一种基本值类型。因为toString是字符串类型,而且
    bar
    是原语值类型,所以得到的初始值相同

您可以在或中阅读更多关于此的信息

如何修复它 看。这已经在那里得到了回答