2014-08-30 109 views
0

我想从我的.js文件传递数组到PHP文件。 数组看起来像JS如下:数组从js到php,错误计数数组长度

theBlock[0 - 79] with the values color, x and y. So for example 
theBlock[10].color or 
theBlock[79].x 

这个数据传递与下面的脚本:

$.ajax({ 
    type: 'POST', 
    url: 'insert.php', 
    data: $(theBlock).serialize() 
}).done(function (data) { 
    console.log(data); 
}).fail(function() { 
    alert("Failed"); 
}); 

而且PHP是以下几点:调用时

$newData = $_POST; 
echo count($newData["theBlock"]) . "\n"; 

现在函数激活这个,数据应该传递给PHP,然后发回给我的数组长度。好吧,它总是让我回到“0”。

阵列由以下脚本创建:

变种theBlock = [];

for (c = 0; c < 80; c++) { 
    theBlock.push({color: 0}); 
} 

之后数组中的如下方式改变:

if (ctx.getImageData(xPixel + minX, yPixel + minY, 1, 1).data[3] == 255 && ctx.getImageData(xPixel + minX, yPixel + minY, 1, 1).data[0] == 000) { 
    id = (xBlock + (yBlock - 1) * 8) - 1; 
    theBlock[id] = { color: 1, x: xBlock, y: yBlock }; 
} 

感谢

+0

打印$ _POST的值以查看实际获得的'var_dump($ _ POST);'。 – 2014-08-30 22:28:43

+0

当我这样做时,我得到:array(0){} – Paco 2014-08-30 22:31:09

+0

我们可以看到'theBlock'变量的构造函数 – Ohgodwhy 2014-08-30 22:36:56

回答

2

好了,你不能在一个JavaScript变量使用序列化()。请参阅API文档。 http://api.jquery.com/serialize/

如果你想编码一个JSON数组,使用JSON.stringify()然后json_decode()它。

$.ajax({ 
    type: 'POST', 
    url: 'insert.php', 
    data: { block: JSON.stringify(theBlock) } 
}).done(function (data) { 
    console.log(data); 
}).fail(function() { 
    alert("Failed"); 
}); 

而且您不需要将$ _POST分配给变量,直接使用它。

echo count(json_decode($_POST['block'])) . "\n"; 

旁注:如果你只是想知道数组长度,你不需要PHP来做到这一点。只要做theBlock.length,你会得到长度。

+0

非常感谢您的帮助! – Paco 2014-08-30 22:42:30

+0

我需要在php中的数据,这就是为什么我发送它不是因为长度,但thx!你能告诉我如何访问例如在PHP数组中的第一个对象?我尝试过: 'echo $ newData [0] [“color”];'但它给了我一个内部服务器错误。 $ newData已经被解码。谢谢! – Paco 2014-08-30 23:00:04

+0

如果您没有设置密钥,默认密钥是数字,所以使用0时它应该可以工作。使用'var_dump($ newData);'打印数组以查看您需要如何访问这些值。 – 2014-08-30 23:09:02