从javascript发送数组到PHP无法正常工作

时间:2011-02-02 00:20:24

标签: php javascript jquery arrays

我正在以这种方式在jquery端创建一个数组。该数组是一个数组数组,其中每个元素都是一个看起来像[jskey, jsvalue]的数组。

    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" 

3 个答案:

答案 0 :(得分:5)

属性值是字符串。将数组转换为字符串时,可以将该数组中的每个元素转换为字符串并用逗号分隔(除非您覆盖toString()方法(提示:不要))。

我建议将数组转换为JSON,然后将其分配给表单控件。然后,您可以在PHP中解析JSON。

http://json.org有链接(在底部)到JSON序列化器/反序列化器的PHP和JS实现。

答案 1 :(得分:2)

大卫多尔沃德给出了一个非常好的解决方案。 为了澄清一点,当您将一个复杂对象(如数组)分配给HTML元素的属性时(这就是jQuery在调用 val()时所执行的操作),该对象将转换为string(通过调用对象上的 toString 方法)。

数组有一个 toString 方法,它完全符合您的体验:数组中的值列表以逗号分隔:

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

要传输复杂的objets,您可以使用JS中的本机JSON(JavaScript Object Notation):

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

在服务器端,PHP 5有一个非常快的JSON API:

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

答案 2 :(得分:0)

您可以将该字符串转换回数组数组,假设它们都是对:

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