2013-04-29 104 views
1
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中沒有顯示任何內容。通過Ajax發送數組失敗

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}); 

它工作正常!

+0

hi max,你可以'console.log(標籤)'之前嗎? – 2013-04-29 11:00:31

+0

@demo對不起,我編輯了我的問題 – max 2013-04-29 11:06:46

+0

您如何知道請求失敗?請提供更多信息。 – 2013-04-29 11:07:52

回答

3

哦,我現在看到了。如果你有字符串鍵,你必須使用一個對象,而不是一個數組:在JavaScript

var labels = {}; 

陣列都應該只持有與數字鍵的元素。雖然可以爲數組指定任意屬性,但它們不被視爲數組的元素,因此大多數處理數組的進程都忽略它們。

此外,您可能想看看jQuery.param以查看jQuery如何將輸入轉換爲可傳輸字符串並相應地調整數據結構。

+0

我正要寫這個。 – MMM 2013-04-29 11:16:52

+0

thnak你,javascript就像一個重要的小丑! – max 2013-04-29 11:23:52

-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 
+1

不,那不是問題。所有PHP看到的是<?php echo $ cd ['name']; ?>,它會用一些不包含'''''的其他字符串替換它。所以生成的JS源碼是有效的。 – 2013-04-29 11:18:22

+0

哦,它回聲的PHP變量..我認爲該數組應該填寫PHP命令。儘管如此,你從來不知道這裏:)但仍然令人困惑。 – 2013-04-29 11:21:22

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

看來你想要創建一個關聯數組,這實際上是JavaScript中的一個對象(JavaScript沒有專用的關聯數組)。因此,數組本身實際上是空的,因爲您正在向數組對象添加屬性。