使用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对象。
我相信在发布到PHP之前,您必须先将您的数组转换为JSON格式。
这是我在过去使用的方法:
var jsonOb = JSON.stringify(yourArray);
$.post(
"yourPage.php",
{jsonOb:jsonOb},
function(r){
//your success response
}
);
希望这不会把戏哥!
W.
感谢您的建议! Stringify似乎也不会输出预期的结果。有趣的是,当我命名我的键值对时,父数组总是说长度为0.任何想法为什么会发生这种情况? – McB 2010-11-23 20:06:49
想通了我的问题。当我最初声明对象时,我通过放入[]来制作allProj和Array。如果我把它放在allProj:{}中,那么它完美地工作!感谢您的建议,帮助缩小了我的错误。
-M
感谢您的建议。我试着运行它,但仍然失去了allProj对象的一部分。这是否与我声明allProj阵列的方式有关?我已经更新了上面的帖子,包括我最初如何声明我的全局变量。我怀疑这可能是我犯了错误的地方? – McB 2010-11-23 19:54:44