如何通过ajax发送二维数组?

时间:2013-05-11 12:41:51

标签: php javascript ajax arrays

我有这种方法将数据发送到服务器:

var points = [];
var coords = polyline.geometry.getCoordinates();
for (var i = 0; i < coords.length; i++)
{
    var x = (coords[i][0]).toFixed(4);
    var y = (coords[i][1]).toFixed(4);
    points[i] = [x,y];
}
$("form").on('submit',
    function(e){
        var data = $(this).serializeArray();
        console.log(points);
        data.push({name:'points[]',value:points});
        $.ajax(
            {
                url: '/admin/index/add-route',
                method: 'post',
                data: data,
                success: function(result) {
                    console.log('succcess');
                }
            }
        );
        console.log(data);
        e.preventDefault();
        return false;
    }
);

在后端,我获得了一个包含以下值的一维数组:

(var dump of $_POST['points'])
array (size=1)  0 => string '48.9225,24.6948,48.9220,24.7090' (length=31)

4 个答案:

答案 0 :(得分:1)

Jquery将直接采用多维数组,无需序列化。

var data = {   foo:123,   酒吧:456,     行:[       {         column1:'你好',         第2栏:'hola',         第3栏:'bonjour',。       },       {         第1栏:'再见',         第2栏:'hasta luego',         第3栏:'au revoir',       },     ]     测试1:{       test2:{         test3:'baz'       }     } }; PHP文件中的_Post数据看起来像这样

阵    (     [foo] =&gt; 123     [bar] =&gt; 456     [rows] =&gt;排列         (             [0] =&gt;排列                 (                     [column1] =&gt;你好                     [column2] =&gt;你好                     [column3] =&gt;你好                 )

        [1] => Array
            (
                [column1] => goodbye
                [column2] => hasta luego
                [column3] => au revoir
            )

    )

[test1] => Array
    (
        [test2] => Array
            (
                [test3] => baz
            )

    )

)

一旦定义了数据多维数组,您的Ajax就可以像

一样简单

$。AJAX({           类型:'post',           cache:false,           url:'。/ ajax.php',           数据:数据       }); 如果您的帖子数组可能包含您不了解的字段,则可以使用

轻松访问php文件中的Post数组。

$ data = file_get_contents('php:// input'); $ data = json_decode($ data,true);

答案 1 :(得分:0)

您不需要使用.serializeArray();

请执行以下操作:

var data = {points: points};

并在PHP方面:

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

答案 2 :(得分:0)

要将数组发送到服务器,请使用JSON.stringify(object),resp。 JSON.stringify(array)将数组或对象转换为字符串。使用PHP中的相同方法再次从此字符串创建php对象(或数组):json_decode(string)

http://php.net/manual/de/function.json-decode.php

反过来是json_encode(data)并在JS方面解析它:JSON.parse(string)

答案 3 :(得分:0)

看起来你正在做一些可疑的事情。使用serializeArray()时,将表单转换为对象:

  

.serializeArray() - 将一组表单元素编码为名称数组   和价值观。

<强> .serializeArray() docs


同时使用您的方案的模型检查此 JSFiddle (由于显而易见的原因,删除了ajax)。


无论如何,既然你已经在使用jquery和POST,那就用JSON来编码数组。

var data = $(this).serializeArray();
data.push({name:'points',value:points});
var dataJson = JSON.stringify(data);

然后在你的ajax中传递

在php方面,你只需要解析json

$data = json_decode($json_string);