передача массива в php через ajax?

#jquery

#jquery

Вопрос:

У меня есть этот массив

 var car = new Array();
car['brand'] = "Ford";
car['color'] = "red";
car['type'] = 1;
  

теперь я попытался отправить это, но php только говорит мне, что car — это неопределенный индекс:

 $.post('regCar.php', { "car[]": car }, function(data) {

    // some other lol here ...

});
  

Отправка "car[]": ["Ford", "red", 1] работает нормально: ( Как я могу передать ассоциативный массив в php?

Комментарии:

1. Не используйте массивы таким образом, используйте объекты. . Создайте print_r($_POST) и посмотрите, что вы получите.

2. вы отправляете данные из php в ajax, но ваш заголовок обратный этому

3. @diEcho: Нет, он отправляет данные с помощью jQuery в PHP-скрипт.

Ответ №1:

Как упоминалось в моем комментарии, вам не следует использовать массивы таким образом. Используйте массивы только для числовых индексов:

Ассоциативные Arrays не разрешены … или, точнее, вам не разрешается использовать нечисловые индексы для массивов. Если вам нужна карта / хэш, используйте Object вместо Array в этих случаях, потому что функции, которые вы хотите, на самом деле являются функциями Object , а не из Array . Array просто происходит расширение Object (как и любой другой объект в JS, и поэтому вы могли бы с таким же успехом использовать Date , RegExp или String ).

Именно по этой причине код не работает.

Взгляните на эту скрипку: предупреждение пустое, что означает, что jQuery вообще не сериализует (и, следовательно, не отправляет) какие-либо данные.

Можно было бы ожидать, что он, по крайней мере, отправит пустое значение, например car[]= , но, по-видимому, это не так.

Если вы используете объект:

 var car = {};
  

это работает

Ответ №2:

Прочитайте json_encode и json_decode

Комментарии:

1. теперь я попытался отправить это, но php только говорит мне, что car — это неопределенный индекс … вы неправильно поняли вопрос.

2. что? я запустил print_r в $ _POST , он пуст! ‘regCar.php ‘, {‘car’: car}, функция (данные) — это синтаксис 🙁

3. @Jason94: Где вы определяете car ? Не могли бы вы, пожалуйста, опубликовать больше вашего кода? car Доступен ли он оттуда, откуда вы вызываете $.post ? Что дает вам console.log(car) непосредственно перед вызовом Ajax? Однако проблема действительно может заключаться в том, что вы используете массив вместо объекта.

4. Потому что он хочет отправить данные из jQuery в PHP, а отправка car не работает. Функции PHP ему здесь тоже не помогут.

Ответ №3:

 $.post('regCar.php ', {'car': car}, функция (данные) { // - Я изменил имя ключевого значения
 });

Вам не нужно добавлять скобки в параметр data

Тем не менее, я рекомендую вам использовать объекты JS.

 var car = {};
car.brand = "Ford";
car.color = "red";
car.type = 1;
  

Если вы получаете неопределенную ошибку на стороне PHP, вам нужно опубликовать свой PHP-код.

Редактировать

Как указывает @Felix Kling, удаление массива в пользу объектов будет работать для вас.

Комментарии:

1. @Felix, похоже на то. Я где-то читал, что JS на самом деле не имеет связанных массивов и что он автоматически преобразует в объекты. Похоже, что объекты — это правильный путь