使用$ .getJSON将数组发送到服务器端

时间:2011-12-21 14:23:08

标签: php javascript jquery ajax json

我正在使用$.getJSON()将一些数据传递到服务器端(PHP,Codeigniter)并使用返回数据来完成一些工作。我发送到服务器的数据是数组的形式。

问题:当关联数组发送到服务器时,服务器端没有收到任何结果。但是,如果发送带有数字索引的普通数组,则在服务器端接收数据。如何将数据数组发送到服务器?

JS代码(不工作)

boundary_encoded[0]['testA'] = 'test';
boundary_encoded[0]['testB'] = 'test1';

$.getJSON('./boundary_encoded_insert_into_db_ajax.php',
    {boundary_encoded: boundary_encoded},
    function(json) {

        console.log(json);

});

JS代码(作品)

boundary_encoded[0][0] = 'test0';
boundary_encoded[0][1] = 'test1';

$.getJSON('./boundary_encoded_insert_into_db_ajax.php',
    {boundary_encoded: boundary_encoded},
    function(json) {

        console.log(json);

});

PHP代码

$boundary_encoded = $_GET['boundary_encoded'];
print_r($_GET);

错误消息

    <b>Notice</b>:  Undefined index: boundary_encoded in <b>C:\xampp\htdocs\test\boundary\boundary_encoded_insert_into_db_ajax.php</b> on line <b>11</b><br />
Array
(
)

工作结果

Array
(
    [boundary_encoded] => Array
        (
            [0] => Array
                (
                    [0] => test
                    [1] => test1
                )

        )

)

3 个答案:

答案 0 :(得分:0)

我建议使用将数组转换为JSON。如果你不能在PHP中这样做(使用json_encode函数),这里有几个JS等价物:

答案 1 :(得分:0)

在你的getJSON调用中,使用

{boundary_encoded: JSON.stringify(boundary_encoded)},

而不是

{boundary_encoded: boundary_encoded},

答案 2 :(得分:0)

这不起作用的原因是因为JavaScript不支持关联数组。这项任务:

boundary_encoded[0]['testA'] = 'test';

出现在JS中工作,因为您可以为任何对象(包括数组)分配新属性。但是,它们不会在for循环中枚举。

相反,您必须使用对象文字:

boundary_encoded[0] = {'testA':'test'};

然后,您可以使用JSON.stringifyboundary_encoded转换为JSON字符串,将其发送到服务器,并使用PHP的json_decode()函数将字符串转换回对象数组。