【问题标题】:Send a multi dimensional array via $.post using jquery使用 jquery 通过 $.post 发送多维数组
【发布时间】:2011-05-14 16:26:53
【问题描述】:

我有一个全局变量,用于在我正在处理的项目中存储大量信息。它是一个具有各种值的对象,我猜其中还有其他对象。比如……

$.myVar {
    currentProj : "Project 1",
    allProjs : [],
    toggleVar : 0
}

现在,随着程序运行和我做事,我实际上是在 allProjs 中添加数组。我想用数组索引作为项目的名称,然后它包含一堆信息。这是运行程序几分钟后对象的样例。

(从 Chrome 的控制台复制):

$.myVar
    Object
    currentProj: "McB2"
    toggleVar: 0
    allProjs: Array[0]
        McB1: Array[0]
            length: 0
            __proto__: Array[0]
        McB2: Array[4]
            0: "02070124"
            1: "02030036"
            2: "02090313"
            3: "02090450"
            length: 4

现在我想使用 $.post 将此数据传递给 PHP 文件,以便将其转换为 JSON 并将其保存在服务器上。

我基本上只是通过运行来做到这一点:

$.post('saveJSON.php', $.myVar, function(data) {
    $('#dumpspace').html(data);
});

为了调试,我刚刚输出了 PHP 文件:

print_r($_REQUEST);

现在我希望有一个多维数组,我可以将它转换为 JSON 然后保存,但它吐出的只是:

Array ( [currentProj] => McB2 [toggelVar] => 0 )

所以我可以看到它没有发送对象的 allProj 部分,但我不知道为什么!当我在控制台中查看对象时,它似乎确实出现了,所以我不确定我错过了什么。

感谢任何帮助。

谢谢!

澄清

我声明 allProjs 的第一部分,是否有可能我在那里做错了什么?当我运行 Stringify 时,我得到了类似的错误结果:

JSON.stringify($.myVar)
"{"currentProj":"McB2","allProjs":[],"toggleVar":0}"

【问题讨论】:

    标签: php jquery json multidimensional-array


    【解决方案1】:

    您需要将.stringify 对象/数组转换成JSON 字符串。所有“现代”浏览器都通过JSON.stringify(obj) 原生支持这一点。如果您还需要支持“旧”浏览器版本,则需要转到http://www.json.org 并下载提供相同功能的json2.js 库。

    反过来,如果你想从服务器接收一个 JSON 化的字符串,你需要通过将 'json' 传递给你的 $.post() 调用来告诉 jQuery 你期待一个 json 字符串,或者你需要通过再次访问JSON 对象自己解析接收到的数据。 JSON.parse(json_string) 将从传入的 JSON 字符串返回一个 Javascript 对象。

    【讨论】:

    • 感谢您的建议。我尝试运行它,但最终还是错过了对象的 allProj 部分。这与我预先声明 allProj 数组的方式有关吗?我已经更新了上面的帖子,包括我最初声明我的全局变量的方式。我怀疑这可能是我做错了什么?
    【解决方案2】:

    找出我的问题。当我最初声明对象时,我通过放入 [] 来制作 allProj 和 Array。如果我将它作为 allProj : {} 放入,那么它可以完美运行!感谢您的建议,帮助缩小了我的错误。

    -M

    【讨论】:

      【解决方案3】:

      我相信您必须先将数组转换为 JSON 格式,然后才能发布到 PHP。

      这是我过去使用的方法:

      var jsonOb = JSON.stringify(yourArray);
      
      $.post(
      "yourPage.php",
      {jsonOb:jsonOb},
      function(r){
      //your success response
      }
      );
      

      希望这对兄弟有用!

      W.

      【讨论】:

      • 感谢您的建议! Stringify 似乎也没有输出预期的结果。有趣的是,当我命名我的键值对时,父数组总是说长度为 0。知道为什么会发生这种情况吗?
      猜你喜欢
      • 2016-07-25
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 2021-06-01
      • 1970-01-01
      • 2011-01-26
      相关资源
      最近更新 更多