2011-12-21 25 views
1

我使用$.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 
       ) 

     ) 

) 
+0

这应该在两种情况下都起作用。你确定没有错字或其他错误吗? – Jon 2011-12-21 14:30:01

+0

我复制粘贴了我实际运行的代码...我不知道为什么它不工作! – Nyxynyx 2011-12-21 14:33:03

+0

是'boundary_encoded [0]'一个数组还是一个对象?如果它是一个数组,则不能执行'boundary_encoded [0] ['testA']',因为JavaScript不会执行关联数组。相反,它会为数组添加一个'.testA'属性,但它不会被枚举,这就是为什么会发送到服务器的原因。 – Graham 2011-12-21 14:33:11

回答

0

这不起作用的原因是因为JavaScript不支持关联数组。这种分配:

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

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

相反,你必须使用对象文本:

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

0

我会用转换阵列JSON建议。如果你不能在PHP这样做(使用json_encode函数),这里有几个JS当量:

+0

我想从客户端Javascript发送数组到服务器端PHP。我想我需要使用对象字面值而不是Javascript中存在的关联数组来发送它 – Nyxynyx 2011-12-21 14:49:17

+0

我不确定你的代码中有多少依赖于数组的使用,但是是的......这将是一个更好的选择。 – 2011-12-21 14:56:17

0

在你的getJSON调用,使用

{boundary_encoded: JSON.stringify(boundary_encoded)}, 

,而不是

{boundary_encoded: boundary_encoded}, 
相关问题