我正在使用$.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 :(得分: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.stringify
将boundary_encoded
转换为JSON字符串,将其发送到服务器,并使用PHP的json_decode()
函数将字符串转换回对象数组。