jQuery AJAX post数组

时间:2014-08-20 14:27:43

标签: javascript jquery ajax json

我有这个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";

然后正确打印

4 个答案:

答案 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})