我有这个JavaScript数组:
testarr = new Array();
testarr[0] = new Array();
testarr[0]["#FFFFFF"] = "White";
testarr[0]["#FFFFFF"] = new Array();
testarr[0]["#FFFFFF"]["#FFFFFA"] = "A";
testarr[0]["#FFFFFF"]["#FFFFFB"] = "B";
testarr[0]["#000000"] = "Black";
testarr[0]["#000000"] = new Array();
testarr[0]["#000000"]["#000001"] = "A1";
testarr[0]["#000000"]["#000002"] = "B1";
我使用这个jQuery AJAX post方法:
$.ajax({
type: 'POST',
url: 'backEndFile.php',
dataType: 'json',
data: {cat:testarr},
success: function(data) {
if (data.success === true) {
alert("SUCCESS");
} else {
alert("NOT SUCCESS")
}
}
});
my backEndFile.php
<?php
var_dump($_POST);
?>
在backEndFile中,var dump print:array(0) {}
找不到我发布的数组。
如果我将数组键从字符串更改为数字,如下所示:
testarr[0] = new Array();
testarr[0][0] = "White";
testarr[0][0] = new Array();
testarr[0][0][0] = "A";
testarr[0][0][1] = "B";
testarr[0][1] = "Black";
testarr[0][1] = new Array();
testarr[0][1][0] = "A1";
testarr[0][1][1] = "B1";
然后正确打印
答案 0 :(得分:2)
JavaScript数组用于使用顺序,数字键名保存数据。
当jQuery将它们序列化为Ajax请求时,它只包含数字键(因为它是一个数组,所以为什么要在其上放置命名键?)。
如果您想要命名键,请使用Object
,而不是Array
。
testarr = new Array();
testarr[0] = new Object();
testarr[0]["#FFFFFF"] = "White";
testarr[0]["#FFFFFF"] = new Object();
testarr[0]["#FFFFFF"]["#FFFFFA"] = "A";
testarr[0]["#FFFFFF"]["#FFFFFB"] = "B";
testarr[0]["#000000"] = "Black";
testarr[0]["#000000"] = new Object();
testarr[0]["#000000"]["#000001"] = "A1";
testarr[0]["#000000"]["#000002"] = "B1";
请注意,您将使用数组覆盖白色和黑色值。你可能不想这样做。
(通常,您还应该更喜欢文字语法([]
/ {}
)到构造函数语法(new Array
/ new Object
))。
testarr = [];
testarr[0] = {};
testarr[0]["#FFFFFF"] = "White";
testarr[0]["#FFFFFF"] = {};
testarr[0]["#FFFFFF"]["#FFFFFA"] = "A";
testarr[0]["#FFFFFF"]["#FFFFFB"] = "B";
testarr[0]["#000000"] = "Black";
testarr[0]["#000000"] = {};
testarr[0]["#000000"]["#000001"] = "A1";
testarr[0]["#000000"]["#000002"] = "B1";
但是你可以全力以赴,只使用字面语法:
testarr = [
{
"#FFFFFF": {
"#FFFFFA": "A",
"#FFFFFB": "B"
},
"#000000": {
"#000001": "A1",
"#000002": "B1"
}
}
];
答案 1 :(得分:1)
试试这个,
testarr = {}
testarr[0] = {}
testarr[0]["white"] = {}
testarr[0]["white"]["#FFFFFA"] = "A";
testarr[0]["white"]["#FFFFFB"] = "B";
testarr[0]["black"] = {}
testarr[0]["black"]["#000001"] = "A1";
testarr[0]["black"]["#000002"] = "B1";
console.log(testarr[0].white);
答案 2 :(得分:0)
以下是生成结构的更合理方法:
var testarr = [{
"#FFFFFF": {
"#FFFFFA": "A",
"#FFFFFB": "B"
},
"#000000": {
"#000001": "A1",
"#000002": "B1"
}
}];
console.log(testarr[0]["#000000"]["#000001"]); // result "A1"
答案 3 :(得分:-1)
尝试在PHP端解码数据。
json_decode(YOURDATA);
或者像@tpeczek评论一样,试试吧
发布时JSON.stringify({cat:testarr})
。