我将数组从jQuery传递给php。
使用以下代码从表生成数组:
var stitchChartArray = [];
var row = 0;
// turn stitch chart into array for php
$('#stitchChart').find('tr').each(function (index, obj) {
//first row is table head- "Block #"
if(index != 0){
stitchChartArray.push([]);
var TDs = $(this).children();
$.each(TDs, function (i, o) {
var cellData = [$(this).css('background-color'), $(this).find("img").attr('src')];
stitchChartArray[row].push(cellData);
});
row++;
}
});
在控制台中它看起来像这样:
[[["rgb(75, 90, 60)", "symbols/177.png"], ["rgb(75, 75, 60)", "symbols/184.png"], ["rgb(75, 90, 60)", "symbols/177.png"], 7 more...], [["rgb(105, 105, 105)", "symbols/163.png"], ["rgb(75, 75, 60)", "symbols/184.png"], ["rgb(75, 90, 60)", "symbols/177.png"], 7 more...], [["rgb(105, 105, 105)", "symbols/163.png"], ["rgb(75, 90, 60)", "symbols/177.png"], ["rgb(75, 75, 60)", "symbols/184.png"], 7 more...], [["rgb(75, 90, 60)", "symbols/177.png"], ["rgb(75, 90, 60)", "symbols/177.png"], ["rgb(98, 119, 57)", "symbols/210.png"], 7 more...], [["rgb(105, 105, 105)", "symbols/163.png"], ["rgb(105, 105, 105)", "symbols/163.png"], ["rgb(150, 150, 195)", "symbols/72.png"], 7 more...], [["rgb(75, 165, 105)", "symbols/187.png"], ["rgb(134, 158, 134)", "symbols/64.png"], ["rgb(165, 180, 180)", "symbols/171.png"], 7 more...], [["rgb(60, 150, 75)", "symbols/189.png"], ["rgb(120, 120, 90)", "symbols/225.png"], ["rgb(143, 163, 89)", "symbols/209.png"], 7 more...]]
它代表一个表格的每一行 - >每个单元格的行 - > [0] rgb值为单元格中单元格[1]图标的bg。
这个jQuery代码从数组中返回正确的元素(和rgb值):
alert(stitchChartArray[1][1][0]); //row 1,cell 1, first value(rgb)
但是当它被发送到php脚本时:
$.post('makeChartPackage.php', {'stitchChart[]': stitchChartArray }, function(data){
alert(data);
});
php抛出错误:
不能在第33行的/Users/tnt/Sites/cross_stitch/makeChartPackage.php中使用字符串偏移作为数组
$stitchChart = $_POST['stitchChart'];
echo $stitchChart[1][1][0]; //line 33
我假设我要么错误地构造数组,要么错误地将它传递给php脚本。
修改 我这样做是为了将数组返回给jQuery:
$stitchChart = $_POST['stitchChart'];
print_r($stitchChart);
结果如下: 排列 ( [0] =&gt; rgb(75,90,60),symbols / 177.png,rgb(75,75,60),symbols / 184.png,rgb(75,90,60),symbols / 177.png,rgb(98,119) ,57),symbols / 210.png,rgb(180,195,105),symbols / 388.png,rgb(165,165,120),symbols / 235.png,rgb(75,75,60),符号/184.png,rgb(90,95,45),symbols / 195.png,rgb(120,120,75),symbols / 156.png,rgb(105,105,105),symbols / 163.png [1] =&gt; rgb(105,105,105),symbols / 163.png,rgb(75,75,60),symbols / 184.png,rgb(75,90,60),symbols / 177.png,rgb(75,90) ,60),symbols / 177.png,rgb(165,165,120),symbols / 235.png,rgb(120,120,75),symbols / 156.png,rgb(75,90,60),符号/177.png,rgb(75,90,60),symbols / 177.png,rgb(105,105,105),symbols / 163.png,rgb(120,120,90),symbols / 225.png [2] =&gt; rgb(105,105,105),symbols / 163.png,rgb(75,90,60),symbols / 177.png,rgb(75,75,60),symbols / 184.png,rgb(75,90) ,60),symbols / 177.png,rgb(98,119,57),symbols / 210.png,rgb(75,90,60),symbols / 177.png,rgb(75,75,60),符号/184.png,rgb(105,105,105),symbols / 163.png,rgb(120,120,90),symbols / 225.png,rgb(105,105,105),symbols / 163.png < / p>
看来数组不是多维的?
答案 0 :(得分:1)
$_POST['stitchChart']
存在(有效地)多维数组的JSON表示,存储为字符串。在PHP中将字符串视为多维索引数组时,您将收到该错误。第一个[x]
被视为“字符串偏移量” - 即位置x
处的字符 - 但下一个和任何后续[x]
地址只能被视为数组(您无法获得单个字符的子字符串)并将发出您收到的错误。
要在PHP中以数组形式访问数据,您需要使用json_decode()
:
$stitchChart = json_decode($_POST['stitchChart'],TRUE);
echo $stitchChart[1][1][0];
修改强>
因为jQuery data
参数似乎无法处理多维数组,所以你应该使用Douglas Crockford的JSON-js库并将结果作为字符串传递给data
。注意:使用json2.js。
以下是您可以这样做的方法:
stitchChartArray = JSON.stringify(stitchChartArray);
$.post('makeChartPackage.php', {'stitchChart': stitchChartArray }, function(data){
alert(data);
});
如果您使用此代码,我原来的PHP建议应该按预期工作。