2011-02-02 38 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]); 
}