2011-02-02 39 views
1

我在jquery這邊創建了一個數組。該數組是一個數組數組,其中每個元素都是一個看起來像[jskey, jsvalue]的數組。從JavaScript發送數組到php不能正常工作

var jsarray = []; 
// jsarray.push([jskey, jsvalue]); 
    jsarray.push([1, 123]); 
    jsarray.push([2, 98]); 
    jsarray.push([3, 107]); 
    jsarray.push([4, 34]); 

我那麼它提交

$('#myform input[name=jsvalues]').val(jsarray); 

在PHP端前的陣列添加到表單中的一個元素,我希望接收陣列的陣列,但我得到的,當我做一個print_r()或var_dump()是一個看起來像這樣的字符串

string() "1,123,2,98,3,107,4,34" 
+1

您仍然在這裏使用HTTP。您的表單輸入只能包含一些文本字符串,而不能包含任意結構化的對象。 JavaScript或jQuery非常好,可以試圖將該數組序列化爲一串文本,但它可能只是對你大吼大叫。考慮使用JSON編碼數組並在PHP中對其進行解碼,或者直接使用它進行處理,因爲您可以使用一行或兩行PHP代碼輕鬆地將該字符串轉換回數組。 – 2011-02-02 00:23:37

回答

2

戴維·多沃德給了一個很好的解決方案。 爲了澄清一點,當你爲HTML元素的屬性指定一個複雜的對象(如數組)時(這是jQuery在你調用val())時所做的工作,該對象被轉換爲一個字符串(通過調用對象上的toString方法)。

數組有的toString方法,但這正是你正在經歷什麼:用逗號分隔的數組內的值的列表:

[1, [2, 3]].toString(); // returns "1,2,3" 

要傳遞複雜OBJETS,你可以使用JSON(JavaScript的對象符號),它是原產於JS:

$('#myform input[name=jsvalues]').val(JSON.stringify(jsarray)); 

在服務器端,PHP 5有一個非常快速的JSON API:

$jsvalues = json_decode($_POST['jsvalues']); 
5

屬性值是字符串。將數組轉換爲字符串時,會將該數組中的每個元素轉換爲一個字符串並用逗號分隔(除非您覆蓋toString()方法(提示:不))。

我建議將數組轉換爲JSON,然後將其分配給窗體控件。然後你可以在PHP中解析JSON。

http://json.org與JSON串行器/解串器的PHP和JS實現有鏈接(在底部)。

0

你可以該字符串轉換回數組的數組,假設他們都是對的:

$arr = explode(",", $_POST['jsvalues']); 
$jsvalues = array(); 
for ($i = 0; $i < count($arr); $i += 2) { 
    $jsvalues[] = array($arr[$i], $arr[$i + 1]); 
}