使用jquery通过$ .post发送多维数组

问题描述:

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

$.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的$这样我就可以将其转换为JSON并将其保存在服务器上的PHP文件。

我这样做基本上是刚刚运行:

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

为了调试我已经得到了PHP文件只是输出:

print_r($_REQUEST); 

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

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

所以我可以看到它是不发送对象的allProj部分,但我不知道为什么!当我看着控制台中的对象时,它似乎显示出来,所以我不确定我错过了什么。

任何帮助表示赞赏。

谢谢!

澄清

的第一部分,在这里我宣布allProjs,是有可能,我做错了什么呢?当我运行字符串化,我结束了一个类似的错误的结果:

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

您需要的对象/数组.stringify成JSON字符串。所有“现代”浏览器都支持JSON.stringify(obj)。如果您还需要支持“较旧”的浏览器版本,则需要转至http://www.json.org并下载提供相同功能的json2.js库。反过来,如果你想从服务器接收一个JSON化的字符串,你需要通过'json'传递给你的$.post()调用来告诉jQuery你期待的是一个json字符串,或者你需要解析通过再次访问JSON对象自己接收到的数据。 JSON.parse(json_string)将从传入的JSON字符串中返回一个Javascript对象。

+0

感谢您的建议。我试着运行它,但仍然失去了allProj对象的一部分。这是否与我声明allProj阵列的方式有关?我已经更新了上面的帖子,包括我最初如何声明我的全局变量。我怀疑这可能是我犯了错误的地方? – McB 2010-11-23 19:54:44

我相信在发布到PHP之前,您必须先将您的数组转换为JSON格式。

这是我在过去使用的方法:

var jsonOb = JSON.stringify(yourArray); 

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

希望这不会把戏哥!

W.

+0

感谢您的建议! Stringify似乎也不会输出预期的结果。有趣的是,当我命名我的键值对时,父数组总是说长度为0.任何想法为什么会发生这种情况? – McB 2010-11-23 20:06:49

想通了我的问题。当我最初声明对象时,我通过放入[]来制作allProj和Array。如果我把它放在allProj:{}中,那么它完美地工作!感谢您的建议,帮助缩小了我的错误。

-M