簡體   English   中英

jQuery AJAX發布數組

[英]jQuery AJAX post array

我有這個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發布方法:

$.ajax({
  type: 'POST',
  url: 'backEndFile.php',
  dataType: 'json',
  data: {cat:testarr},
    success: function(data) {
      if (data.success === true) {
        alert("SUCCESS");
      } else {
        alert("NOT SUCCESS")
      }
    }
  });

我的backEndFile.php

<?php
  var_dump($_POST);
?>

在backEndFile中,var dump prints: 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";

然后正確打印

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";

請注意,您正在用數組覆蓋White和Black值。 您可能不想這樣做。

(通常,相對於構造函數語法( 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"
                }
        }
];

嘗試這個,

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);

這是一種生成結構的更合理的方法:

var testarr = [{
  "#FFFFFF": {
    "#FFFFFA": "A", 
    "#FFFFFB": "B"
  },
  "#000000": {
    "#000001": "A1",
    "#000002": "B1"
  }
}];

console.log(testarr[0]["#000000"]["#000001"]); // result "A1"

嘗試在PHP端解碼數據。

json_decode(YOURDATA);

或就像@tpeczek評論一樣,在發布時嘗試JSON.stringify({cat:testarr})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM