【问题标题】:JQuery JSON Array formatting/serializing before posting发布前 JQuery JSON 数组格式化/序列化
【发布时间】:2014-08-16 02:42:25
【问题描述】:

我有以下 JSON:

{ 
 "firstArrayOfJSON": [
          {
            "something" : "something"
          },
          {
            "another" : "another"
          },
          {
            "secondArrayOfJson" : [
                              {
                                "something" : "something",
                                "other" : "other"
                               }
                             ]
          }
         ]
      }

在变量监视(谷歌浏览器)上,在任何处理之前,对象显示为:

[0]: Object
     something : "something"
     another : "another"
     secondArrayOfJson : Object
                         [0]: something : "something",
                         [1]: other : "other"

还有下面的 JQuery ajax:

 $.ajax({
                type: "POST",
                url: url,
                data: data,
                success: success,
                dataType: "json"
            });

在服务器(Express JS)上,我有一个测试服务,它只是吐出请求正文。然后我继续检查客户端的响应。

反应变了:

第一级数组显示为:

[0]: Object
     something : "something"
     another : "another"
     secondArrayOfJson : Object
                         [0][something] : "something",
                         [1][other] : "other"

我仍然可以正常使用对象:firstArrayOfJson[2].secondArrayofJson[0].something

我已经在 Mongo 服务器上测试过存储,数组元素看起来确实像 [0][something] (Robomongo)

当我向secondArrayOfJson 添加另一个对象时,“问题”消失了。

因此,除非这是在 Google Chrome 和 Robomongo 上都发生的查看器问题,否则这确实是传递对象的方式。

我想知道这是否有合理的原因,或者我是否应该担心我正在做的任何事情。

【问题讨论】:

  • 可能与 jQuery 如何序列化您发送到服务器的数据以及您的服务器如何处理它有关。例如。 {foo: [1, 2]} 变成 foo[0]=1&foo[1]=2

标签: javascript jquery arrays ajax json


【解决方案1】:

实际上,我的 AJAX 查询缺少两个重要参数。根据 JQ 文档:

数据类型:PlainObject 或 String 或 Array 要发送到的数据 服务器。如果还不是字符串,则将其转换为查询字符串。 它附加到 GET 请求的 url。请参阅 processData 选项 防止这种自动处理。对象必须是键/值对。如果 value 是一个数组,jQuery 用相同的键序列化多个值 基于传统设置的值(如下所述)。

通过添加

processData : false,
contentType : "application/json"

我确保 JQ 为请求保持对象完整。我试过了,效果很好。

感谢Felix Kling 解惑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多