首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能追加到我的JSON对象?(jQuery/Javascript)

为什么我不能追加到我的JSON对象?(jQuery/Javascript)
EN

Stack Overflow用户
提问于 2013-05-23 18:42:51
回答 4查看 166关注 0票数 0

我使用下面的代码来尝试向bar对象添加一个新属性:

代码语言:javascript
运行
复制
$(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中查看控制台,我总是得到类似如下的结果:

代码语言:javascript
运行
复制
name=Grahame&email=foo%40bar.com&message=Hello.

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-23 18:45:23

你可以使用下面的代码:

代码语言:javascript
运行
复制
bar = $('form').serialize();
bar += '&foo=xyz';
console.log(bar);

目前,您正尝试将bar用作数组(或注释代码中的对象)。.serialize()实际上会生成一个URL编码的字符串,所以你可以简单地将你的值附加到它上面。

票数 0
EN

Stack Overflow用户

发布于 2013-05-23 18:46:56

这里的其他答案谈到了如何绕过这个问题,但没有人解释为什么会发生这种情况,所以我想我会试一试。

下面是后台正在发生的事情:

  • 您可以调用.serialize,它会生成一个字符串

JavaScript中的

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

  • 将属性赋值给它,该属性将添加到已装箱的object

  • 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
EN

Stack Overflow用户

发布于 2013-05-23 18:45:32

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

如果你想添加数据,你需要序列化数据:

代码语言:javascript
运行
复制
bar += "&" + encodeURIComponent('foo') + "=" + encodeURIComponent('xyz');

(如果知道数据中没有URL特殊字符,则可以跳过encode URI组件)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16711845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档