2013-04-29 2 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 (метки)' перед публикацией? –

+0

@demo извините, я отредактировал мой вопрос – max

+0

Как вы узнаете, что запрос не удается? Пожалуйста, предоставьте дополнительную информацию. –

ответ

3

О, я вижу сейчас. Если у вас есть строковые ключи, вы должны использовать объект, а не массив:

var labels = {}; 

Массивы в JavaScript, как предполагается, только держать элементы с помощью цифровых клавиш. Хотя вы можете назначить произвольные свойства массивам, они не считаются элементами массива и, таким образом, игнорируются большинством процессов, которые обрабатывают массивы.

Кроме того, вы можете взглянуть на jQuery.param, чтобы увидеть, как jQuery преобразует входные данные в транспортную строку и соответствующим образом настроит вашу структуру данных.

+0

Я собирался это написать. – MMM

+0

thnak you, javascript похож на важного клоуна! – max

-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, это ' ', и он заменит его на другие строки, которые не содержат' '' ''. Таким образом, сгенерированный источник JS действителен. –

+0

О, это echos переменная php .. Я думал, что массив должен быть заполнен php-командами. Вы никогда не знаете здесь :) Все еще запутывающе читать. –

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

Это кажется вам хотите создать ассоциативный массив, который на самом деле является объектом в JavaScript (JavaScript не имеет выделенных ассоциативных массивов). Таким образом, сам массив фактически пуст, потому что вы добавляете свойства к объекту массива.

Смежные вопросы