通过Ajax发送数组失败

时间:2013-04-29 10:57:42

标签: javascript jquery

var labels = new Array();

<?php foreach($crud_data as $cd ) { ?>
  labels['<?php echo $cd['name'] ; ?>'] = '<?php echo $cd['label'] ; ?>';
<?php } ?>

$.post('url.php' , { labels:labels} );

为什么我不能像这样发送labels数组?它没有在Firebug中显示任何内容。

我的console.log(labels)结果:

[]

avatar
"avatar"

email
"email"

id
"id"

name
"name"

password
"password"

如果我像这样填充数组

<?php foreach($crud_data as $cd ) { ?>
  labels.push('<?php echo $cd['label'] ; ?>');
<?php } ?>

$.post('url.php' , { labels:labels} );

它工作正常!

3 个答案:

答案 0 :(得分:3)

哦,我现在看到了。如果你有字符串键,你必须使用一个对象,而不是一个数组:

var labels = {};

JavaScript中的数组只能使用数字键来保存元素。虽然您可以为数组分配任意属性,但它们不被视为数组的元素,因此被大多数处理数组的进程忽略。

此外,您可能需要查看jQuery.param以了解jQuery如何将输入转换为可传输字符串并相应地调整数据结构。

答案 1 :(得分:1)

labels['<?php echo $cd['name'] ; ?>'] =

似乎你想创建一个关联数组,它实际上是JavaScript中的一个对象(JavaScript没有专用的关联数组)。因此,数组本身实际上是空的,因为您要向数组对象添加属性。

答案 2 :(得分:-1)

您的阵列设置无效。你的琴弦配方不合适:

labels['<?php echo $cd['name'] ; ?>']

这样做:

labels[
// Open string
'         
<?php echo $cd[
// close string
' 
// Not in the string, seen as variable
name          
// The rest of the string   
'] ; ?>'         

您需要混合使用双引号和单引号:

labels["<?php echo $cd['name'] ; ?>"] = "<?php echo $cd['label'] ; ?>";
       ^------------v--------------^
                    //Encapsulate string in double quotes