2014-08-30 106 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